Docker Compose で WordPress
web+dbなど, 複数のコンテナやサービスで構成されるアプリを構築する際の手段の一つにDocker Composeがある.
構成パラメータをymlに書き出すので, ymlを読むと何をしているのかが何となくわかるのがいい感じ.
今回はお試しWordPress環境の構築を例に, Docker Composeを使ってみる.
(DockerHubに書いてあることをほぼそのままやる. )
https://hub.docker.com/_/wordpress
環境
- Docker host on Oracle VirtualBox VM (Ubuntu 18.04) on macOS Mojave
- Docker 18.09.0
$ 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'
最新のWordPressとMySQL 5.7のイメージを指定している.
WORDPRESS_DB_ で接続先のデータベースの情報を指定する.
- stack.ymlのディレクトリで以下のコマンドを実行
$ 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" } } ]
- こんな感じの仮想ネットワークが作成されている.
- 各コンテナのステータスやポートは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 にアクセスすると初期設定画面が開く
設定を順次行い, ブログ作成などをやってみる.
おわり.
- 終わったら, docker-composeで作成したコンポーネントをまとめて削除する.
$ docker-compose -f stack.yml down --rmi all
--rmiオプションでallを指定すると, docker-composeで作成したコンテナ・イメージ・ネットワークなどが一括削除される.
以上