dockerComposeでコンテナをまとめて起動する
はじめに
くーばねてすをやっつけるために新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。今回はデータベースを使用したブログサーバーをdockerでまとめて構築してみる。まとめて構築するのにはdockerComposeを使用して構築する。
概要
■複数のコンテナを連動して一つ一つ構築する
■dockerComposeでまとめてコンテナを起動する
■コンテナを一括で停止および削除する
をまとめた!(>_<)
■複数のコンテナを連動して一つ一つ構築する
ブログサーバーを構築するのに、
①dockerネットワークの作成
②データベースコンテナの永続化ボリュームの作成
③Mysqlコンテナの作成
④WordPressコンテナの作成
をつくる。ここでは一つずつセットアップしていく。
①dockerネットワークの作成
ここではデフォルトのbridge ネットワークでもいいが、分かりやすくWordPress専用のネットワークを作成する。
$ docker network create wordpressnet
ネットワーク構成確認
$ docker network ls
fc96c2976a97 bridge bridge local
161ff55df66f host host local
c95bc06da33f none null local
fa72af2b721a wordpressnet bridge local
②データベースコンテナの永続ボリュームを作成する
データベースコンテナが消えてしまってもデータを格納できる永続ボリュームを作成する。
コンテナの永続ボリュームを作成するにはdocker volume createを使用する。
$ docker volume create db_volume
db_volume
コンテナのボリュームを確認する。
$ docker volume ls
DRIVER VOLUME NAME
local db_volume
③Mysqlコンテナの作成
データベースコンテナを作成する。Mysqlの設定を環境変数でセットしてイメージを引っ張ってきて、先ほど作ったコンテナネットワークで起動する。
$ docker run --name wordpress-db -itd -dit -v db_volume:/var/lib/mysql -e MYSQL_LOOT_PASSWORD=管理者パスワード -e MYSQL_DATEBASE=データベース名 -e MYSQL_USER=ユーザー名 -e MYSQL_PASSWORD=ユーザー名のパスワード --net wordpressnet mysql:5.7 bash
Unable to find image 'mysql:5.7' locally
略
5.7: Pulling from library/mysql
Digest: sha256:853105ad984a9fe87dd109be6756e1fbdba8b003b303d88ac0dda6b455f36556
Status: Downloaded newer image for mysql:5.7
9671b5199bf859132e9289a4756fec7f08472e0f65d983bb2ad59d1099072581
コンテナの起動を確認する
$ docker ps
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d35aea7cb8b mysql:5.7 "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 3306/tcp, 33060/tcp wordpress-db
④WordPressコンテナの作成
WordPressコンテナを起動する。
$ docker run --name wordpress-app -dit -p 8080:80 -e WORDPRESS_DB_HOST=接続データベースのホスト名 -e WORDPRESS_DB_NAME=接続データベース名 -e WORDPRESS_DB_USER=接続するユーザー名 -e WORDPRESS_DB_PASSWORD=接続するユーザー名のパスワード --net wordpressnet wordpress
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf033d068edc wordpress "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp wordpress-app
2d35aea7cb8b mysql:5.7 "docker-entrypoint.s…" 18 minutes ago Up 18 minutes 3306/tcp, 33060/tcp wordpress-db
ブラウザで
http://dockerホストIPアドレス:8080/
で検索し、WordPressのセットアップなどをする。
データベースコンテナと連携するWordPressコンテナを作成した。
■dockerComposeでまとめてコンテナを起動する
上記の設定はdockercomposeでコンテナをまとめて起動することができる。
ひとつひとつ起動やセットアップをしてもいいのだが、複数のコンテナを連携したいとき、コンテナの起動し忘れや、 セットアップの順番など一つでも抜けているとコンテナが連携しなくなることがある。
こんなときにdockerComposeが約にたつ。
dockerComposeを利用するときは、まずdockerComposeをインストールされているか確認。
$ docker-compose -v
docker-compose version 1.27.4, build 40524192
作業用ディレクトリでdockerComposeファイルを作成する。
$ vim docker-compose.yml
version: "3"
services:
wordpress-db:
image: mysql:5.7
networks:
- wordpressnet
volumes:
- db_volume:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: myrootpassword
MYSQL_DATABASE: wordpressdb
MYSQL_USER: wordpressuser
MYSQL_PASSWORD: wordpresspass
wordpress-app:
depends_on:
- wordpress-db
image: wordpress:latest
networks:
- wordpressnet
ports:
- 8080:80
restart: always
environment:
WORDPRESS_DB_HOST: wordpress-db
WORDPRESS_DB_NAME: wordpressdb
WORDPRESS_DB_USER: wordpressuser
WORDPRESS_DB_PASSWORD: wordpresspass
networks:
wordpressnet:
volumes:
db_volume:
dockerComposeYamlファイルを作成しWordPressコンテナ、Mysqlコンテナ、永続ボリューム、環境変数のセットアップをして、ファイルのあるディレクトリで起動
するには
$ docker-compose up
で起動する。
$ docker-compose up -d Creating network "user_wordpressnet" with the default driver
Creating volume "user_db_volume" with default driver
Creating user_wordpress-db_1 ... done Creating user_wordpress-app_1 ... done
起動の確認をする。
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------
wordpress_wordpress-app_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp
wordpress_wordpress-db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
コンテナの名前は
作業用ディレクトリ名-コンテナ名-数字
というように名付けられている。
コンテナの起動を確認。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc7431bdd453 wordpress:latest "docker-entrypoint.s…" 16 minutes ago Up 16 minutes 0.0.0.0:8080->80/tcp user_wordpress-app_1
64796a8ae728 mysql:5.7 "docker-entrypoint.s…" 16 minutes ago Up 16 minutes 3306/tcp, 33060/tcp user_wordpress-db_1
ネットワークの確認
$ docker network ls
docker network ls
NETWORK ID NAME DRIVER SCOPE
04bb0d4d26cc api-net bridge local
a02a1cc2fda3 bridge bridge local
161ff55df66f host host local
c95bc06da33f none null local
fa72af2b721a wordpressnet bridge local
ボリュームの確認
$ docker volume ls
docker volume ls
DRIVER VOLUME NAME
local 42cde0ee0e7c4af7106bf649e67854a8116429398c5f3820172643eca5a4d8c9
略
local db_volume
ここで作成できたコンテナは個々に停止したり削除したりできるが、dockerComposeで一括管理することができる。
■コンテナを一括で停止および削除する。
$ docker-compose down
Stopping user_wordpress-app_1 ... done Stopping user_wordpress-db_1 ... done Removing user_wordpress-app_1 ... done Removing user_wordpress-db_1 ... done Removing network user_wordpressnet
コンテナの確認をする。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dockerComposeで一括削除するときにdocker-compose.ymlファイルの内容に従って削除されるの一括で削除するときはファイルの書き換えのないように気をつける。
まとめ
すごいべんりだと思った(>_<)
Discussion