【Docker】Docker Composeを理解する(WordPress環境の構築)
どうもこんにちは、
最近学んだDocker Composeについて解説します。
具体例にWordPressの環境を設定しながら理解していきます。
※本記事は、書籍「仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん」を参考にしました。
目次
Docker Composeとは?
Docker Composeは、Dockerへの命令を定義ファイル(YAMLファイル)に記述してまとめて実行できる仕組みです。
例えば、WordPressをDockerで構築する場合、複数のコンテナを構成する必要があります。(以下図)
また、これらのシステムを作るには、コマンドの引数やオプションが多く面倒です。
Docker Composeを使えば、定義ファイルにコマンドの内容を書き込んで一気に実行できます。
Docker Composeを使わずにWordPressを構築する
Docker Composeを理解するため、まずはDocker Composeを使わずにWordPressを構築してみます。
手順フローは以下。
1.ネットワークを作る
2.MySQLコンテナを作る
3.WordPressコンテナを作る
4.確認
5.後始末
1.ネットワークを作る
WordPress環境を構築するには、MySQLコンテナとWordPressコンテナを仮想的なネットワークでコンテナ同士を繋ぐ必要があります。
以下のコマンドでdockerネットワークを生成できます。
今回は、wordpress000test1という名前にしました。
docker network create wordpress000test1
以下コマンドでネットワークが作成されていることが確認できました。
docker network ls
2.MySQLコンテナを作る
続いて、以下コマンドでMySQLのコンテナを作成します。
docker run --name mysql000ex11 -dit --net=wordpress000test1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000user0 -e MYSQL_PASSWORD=user0pass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
書籍には、default-authentication-plugin=mysql_native_passwordの記載がありましたが、これを入れると現状エラーが出るので、外しました。
最新のmysqlでは、最後の’default-authentication-plugin=mysql_native_password’.は不要のようです。
docker run --name mysql000ex11 -dit --net=wordpress000test1 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000user0 -e MYSQL_PASSWORD=user0pass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
3.wordpressコンテナを作る
続いて、以下コマンドでwordpressコンテナを作ります。
docker run --name wordpress000ex12 -dit --net=wordpress000test1 -p 8085:80 -e WORDPRESS_DB_HOST=mysql000ex11 -e WORDPRESS_DB_NAME=wordpress000db -e WORDPRESS_DB_USER=wordpress000user0 -e WORDPRESS_DB_PASSWORD=user0pass wordpress
docker psコマンドでコンテナが稼働しているか確認します。
2つのコンテナが起動できていることが確認できました。
4.確認
http://localhost:8085/へアクセスしてみます。
無事、wordpressへアクセスできました。
5.後始末
wordpressの環境が構築されたことがわかったので、最後に後始末しておきます。
まずは、コンテナを停止します。
docker stop wordpress000ex12
docker stop mysql000ex11
コンテナを削除します。
docker rm wordpress000ex12
docker rm mysql000ex11
イメージを削除します。
docker image rm wordpress
docker image rm mysql
ネットワークを削除します
docker network rm wordpress000test1
さて、次はDocker Composeを使ってWordpressを構築していきます。
Docker Composeの使い方を学ぶ
Docker Composeを使うには、ホストPC側にフォルダを作ってそこに定義ファイル(YAMLファイル)を起きます。
YAMLファイルは、最新のdockerは、
※書籍だと、
一応、docker-compose.ymlでも動くようですが、最新仕様のcompose.yamlで作成してみることにします。
YAMLファイルの構文は、実際にWordPress環境を作りながら理解します。
Docker Composeを使ってWordPressを構築する
MySQLコンテナの定義を記載
まずは、MySQLのコンテナの定義をcompose.yamlファイルに記載します。コンテナの記載は、servicesの中に字下げして記載します。
また、MySQLのオプション関連は、前回コマンドでコンテナを作成したオプションと同じものを設定しました。
1 2 3 4 5 6 7 8 9 10 11 |
services: mysql000ex11: image: mysql networks: wordpress000test1: restart: always environment: MYSQL_ROOT_PASSWORD: myrootpass MYSQL_DATABASE: wordpress000db MYSQL_USER: wordpress000user0 MYSQL_PASSWORD: user0pass |
WordPressコンテナの定義を記載
次にWordPressコンテナの定義を記載します。
depends_onは、他のサービスに依存することを示すものです。今回はMySQLに依存しますので、”mysqp000ex11″を記載します。
あとは、コマンドで作成したときと同じオプションを指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
services: mysql000ex11: image: mysql networks: wordpress000test1: restart: always environment: MYSQL_ROOT_PASSWORD: myrootpass MYSQL_DATABASE: wordpress000db MYSQL_USER: wordpress000user0 MYSQL_PASSWORD: user0pass wordpress000ex12: depends_on: - mysql000ex11 image: wordpress networks: wordpress000test1: ports: - 8085:80 restart: always environment: WORDPRESS_DB_HOST: mysql000ex11 WORDPRESS_DB_NAME: wordpress000db WORDPRESS_DB_USER: wordpress000user0 WORDPRESS_DB_PASSWORD: user0pass |
ネットワークの定義を記載
コンテナ同士をつなぐネットワークの定義を記載します。servicesと同じ階層でnetworksを記載し、字下げしてネットワーク名を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
services: mysql000ex11: image: mysql networks: wordpress000test1: restart: always environment: MYSQL_ROOT_PASSWORD: myrootpass MYSQL_DATABASE: wordpress000db MYSQL_USER: wordpress000user0 MYSQL_PASSWORD: user0pass wordpress000ex12: depends_on: - mysql000ex11 image: wordpress networks: wordpress000test1: ports: - 8085:80 restart: always environment: WORDPRESS_DB_HOST: mysql000ex11 WORDPRESS_DB_NAME: wordpress000db WORDPRESS_DB_USER: wordpress000user0 WORDPRESS_DB_PASSWORD: user0pass networks: wordpress000test1: name: wordpress000test1 |
これでyamlファイルができました。
保存していよいよ実行してみます。
Docker Composeを実行する
以下コマンドを実行して定義ファイルの内容を実行します。
-dオプションは、バックグラウンドで実行するオプションです。
docker compose -f compose.yaml up -d
docker psを確認すると、2つコンテナが立ち上がっていることが確認できました。
早速、http://localhost:8085にアクセスしてみます。
WordPressアクセスできました。
コマンドでコンテナを作る場合と比べて、docker composeだと一発ですべて起動してくれるので便利ですね。
コンテナとネットワークを停止・削除
以下コマンドを実行すると、コンテナとネットワークを停止して削除までやってくれます。
docker compose -f compose.yaml down
docker ps -aで確認するとコンテナが削除されていることを確認できました。
最後に
以上、今回はDocker Composeを勉強しました。
複数コンテナを生成して環境構築する際は、Docker Composeを使えばとても簡単に環境構築できることが分かりました。
自分が作るシステムでもDocker Composeを活用していこうと思います。
それでは!
スポンサーリンク