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/