Contents
はじめに
Docker Composeを使うと複数のコンテナを定義・実行できるらしい。お試しでWordPressとMySQLのコンテナをそれぞれ操作していたが、それがまとめて管理できる。
イメージをつかみたいため、今回も細かいことはあまり気にしないで試してみる。
どうすればいい?
YML形式のファイルに定義してコマンドで実行する。
事前にdocker-composeをインストールしておくこと。(私はまとめていれてしまいましたが、こちら参考までに)
想定コマンド
前回、試したDockerコマンド(以下)をDocker Composeで試してみる。
$ docker run --name mysql --network wp-network -e MYSQL_ROOT_PASSWORD=<パスワード> -d mysql:5.7 $ docker run --name dev-wordpress --network wp-network -e WORDPRESS_DB_PASSWORD=<パスワード> -p 8080:80 -d wordpress
docker-comporse.ymlを作成
上記コマンドで実行した内容をdocker-comporse.ymlに書き起こします。
1.作業ディレクトリ作成して移動
$ mkdir wordpress $ cd wordpress/
2.docker-comporse.ymlを作成
version: '3.5' services: db: image: mysql:5.7 container_name: dev-mysql volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: root-pass MYSQL_DATABASE: wordpress MYSQL_USER: wp-user MYSQL_PASSWORD: wp-user-pass networks: - backend wordpress: depends_on: - db image: wordpress:latest container_name: dev-wordpress ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wp-user WORDPRESS_DB_PASSWORD: wp-user-pass networks: - backend volumes: db_data: networks: backend: name: wp-network driver: bridge
volumes: 永続ストレージ(実態の場所とかはまた別途)
networks: Dockerネットワークの設定。指定しなくてもdocker-compose.ymlを使うと自動で作成されるが、任意のネットワーク名をつけるために今回は使用。
docker-comporse.ymlからコンテナ起動
-dオプションつけてバックグラウンドでコンテナ起動
$ docker-compose up -d Creating network "wp-network" with driver "bridge" Creating volume "wordpress_db_data" with default driver Creating dev-mysql ... done Creating dev-wordpress ... done
コンテナができていることを確認
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ee6cd4832ee3 wordpress:latest "docker-entrypoint.s…" 39 seconds ago Up 37 seconds 0.0.0.0:8080->80/tcp dev-wordpress 116a4556a3ad mysql:5.7 "docker-entrypoint.s…" 40 seconds ago Up 38 seconds 3306/tcp dev-mysql
ブラウザでWordPressの画面が表示されることを確認
確認・操作コマンド
Dockerネットワーク「wp-network」ができていることを確認
$ docker network ls NETWORK ID NAME DRIVER SCOPE 475d5461ba1c bridge bridge local 39ceb5045065 host host local a266b0b7d53a none null local 43bebca15e8b wp-network bridge local
「wp-network」の詳細確認
$ docker network inspect wp-network [ { "Name": "wp-network", "Id": "43bebca15e8b143ed6031a031772622c0937304d5957d7e234bbc35a0efdd882", "Created": "2018-08-10T09:59:26.353821495Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": true, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "116a4556a3adfefa9d304d6e74f5580f95f19b53e461ee7ce287fa1910f0947a": { "Name": "dev-mysql", "EndpointID": "6c104e6018b8e2a290da5c752f7322c27f59a416473f7129b0c68fe48cb97eb7", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }, "ee6cd4832ee3f33ad5f543eb1b45b48cca338fba1fa4c521bcf48adfa37e24cc": { "Name": "dev-wordpress", "EndpointID": "ecdeb6c0d2755d90ab568f9534b1f5286582552e993335a2905cb8020c8e7af7", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" } }, "Options": {}, "Labels": { "com.docker.compose.network": "wp-network", "com.docker.compose.project": "wordpress", "com.docker.compose.version": "1.22.0" } } ]
volumeの確認
$ docker volume ls DRIVER VOLUME NAME local 622eb5bdee58214be8d7629361ed4d39c1048e93509f45f2cc61ce63751485af local wordpress_db_data
volumeの詳細確認
$ docker volume inspect wordpress_db_data [ { "CreatedAt": "2018-08-10T09:59:37Z", "Driver": "local", "Labels": { "com.docker.compose.project": "wordpress", "com.docker.compose.version": "1.22.0", "com.docker.compose.volume": "db_data" }, "Mountpoint": "/var/lib/docker/volumes/wordpress_db_data/_data", "Name": "wordpress_db_data", "Options": null, "Scope": "local" } ]
コンテナの停止
$ docker-compose kill Killing dev-wordpress ... done Killing dev-mysql ... done
コンテナの削除
$ docker-compose rm Going to remove dev-wordpress, dev-mysql Are you sure? [yN] y Removing dev-wordpress ... done Removing dev-mysql ... done
作成したDockerネットワークの削除
$ docker network rm wp-network
作成したvolumeの削除
$ docker volume rm 622eb5bdee58214be8d7629361ed4d39c1048e93509f45f2cc61ce63751485af $ docker volume rm wordpress_db_data
リンク切れvolumeの削除 (使われていないvolumeの削除はこちらが便利)
$ docker volume prune WARNING! This will remove all local volumes not used by at least one container. Are you sure you want to continue? [y/N]
Docker楽しい
参考
https://eikatou.net/blog/3299.html
https://qiita.com/y_hokkey/items/d51e69c6ff4015e85fce
https://docs.docker.com/compose/wordpress/
https://qiita.com/Ikumi/items/b319a12d7e2c9f7b904d
https://knowledge.sakura.ad.jp/16862/