いろいろ書いていく

やってみたなど

Docker Compose で WordPress

web+dbなど, 複数のコンテナやサービスで構成されるアプリを構築する際の手段の一つにDocker Composeがある.
構成パラメータをymlに書き出すので, ymlを読むと何をしているのかが何となくわかるのがいい感じ.
今回はお試しWordPress環境の構築を例に, Docker Composeを使ってみる.
(DockerHubに書いてあることをほぼそのままやる. )
https://hub.docker.com/_/wordpress

環境

$ docker -v
Docker version 18.09.0, build 4d60db4
  • docker-composeのインストール

Linux環境でDockerをインストールしていても, Docker Composeはインストールされない.
以下を参考にホストマシンにdocker-composeをインストールする.
docs.docker.com

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    864      0 --:--:-- --:--:-- --:--:--   862
100 11.1M  100 11.1M    0     0   783k      0  0:00:14  0:00:14 --:--:-- 1098k
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.23.1, build b02f1306
$ 
  • Docker Composeをインストールしたら, 適当なディレクトリで以下のstack.ymlファイルを作成
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'

最新のWordPressMySQL 5.7のイメージを指定している.
WORDPRESS_DB_ で接続先のデータベースの情報を指定する.

$ docker-compose -f stack.yml up

(略)

-fオプションはupの前にしないとエラーが出るかも.
このコマンドにより, ymlで指定したイメージの取得, WordPressコンテナとMySQLコンテナの起動, db接続などが行われる.
dbの互換性などでうまく起動しない場合もあるので, その場合はdbのバージョンを変更して試してみる.
Docker内でのネットワークもデフォルト設定で作成してくれる.
作成されたネットワークの情報はdocker network inspectで確認できる

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
df9f685f5ba9        bridge              bridge              local
6dc567989d6f        host                host                local
dd596238709d        none                null                local
0e8b407e4748        wordpress_default   bridge              local

$ docker network inspect wordpress_default 
[
    {
        "Name": "wordpress_default",
        "Id": "0e8b407e474893dccf87901d5430d012e0d6e9900ea624cdb08a76bed14a2688",
        "Created": "2019-01-01T13:14:04.278596181+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "9b60a44e3db6693a605a9a8328e4ec78bfff8031b4f85c22e95f1e825c12c10d": {
                "Name": "wordpress_wordpress_1_c757a4d508cd",
                "EndpointID": "a1c750990e9f00868321ea9ad38d007ede2924f10719ae0b93d4f19362cd14fe",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            },
            "ea3572652f4ab07568d530e3cb11b816a5cae7144d232888e293bd0cca6fd932": {
                "Name": "wordpress_db_1_3c36a9263ab8",
                "EndpointID": "47154ceb96f3695878d364e4f2075e146f272919264855d7631b9854894c311d",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "wordpress",
            "com.docker.compose.version": "1.23.1"
        }
    }
]
  • こんな感じの仮想ネットワークが作成されている.

f:id:koimedenshi:20190101144944p:plain

  • 各コンテナのステータスやポートはdocker-compose psで確認できる.
$ docker-compose -f stack.yml ps
         Name                                                                     Command           State          Ports        
--------------------------------------------------------------------------------------------------
wordpress_db_1_3c36a9263ab8               docker-entrypoint.sh mysqld       Up      3306/tcp, 33060/tcp 
wordpress_wordpress_1_c757a4d508cd   docker-entrypoint.sh apach ...     Up      0.0.0.0:8080->80/tcp
  • docker-composeがうまくいったら, ブラウザを開いてhttp://localhost:8080 にアクセスすると初期設定画面が開く

f:id:koimedenshi:20190101013406p:plain

設定を順次行い, ブログ作成などをやってみる.

おわり.

$ docker-compose -f stack.yml down --rmi all

--rmiオプションでallを指定すると, docker-composeで作成したコンテナ・イメージ・ネットワークなどが一括削除される.

以上