Docker Composeでコンテナ連携
これまでの連載では、httpdを例に「単一のサービスをコンテナとして使用する場合」での解説を行ってきました。
ですが実際には「複数のコンテナを組み合わせて動かす」場合がほとんどだと思います。
その場合、コンテナの起動順序や個別のパラメータ設定、オプションなどの情報を管理していくことが規模に応じて複雑化し、大変になっていきます。
そのような場合、Docker Composeを使用する(=複数コンテナ同士の依存関係や設定をymlファイルに記述する)ことで、手順の簡略化・手順誤りを軽減することができます(ファイル内容を変更しない限り、何度でも同じ条件で再現が可能です)。
今回は、Docker Composeを使ってWordpress環境を構築してみます。
ymlファイルの作成とCompose起動
それでは改めて、Docker Composeのバージョン確認をしておきます。
※Docker Composeは当連載の第1回目にインストールしました。
$ docker-compose --version
docker-compose version 1.23.1, build b02f1306
インストールされていることを確認できたら、ここから実際に定義ファイルを作成していきます。
まず準備として、作業ディレクトリを用意します。
今回はユーザーディレクトリ直下に「docker_wp」ディレクトリを作成し、
そこへ「docker-compose.yml」を作成することとします。
$ mkdir docker_wp $ touch docker_wp/docker-compose.yml $ vi docker_wp/docker-compose.yml
ファイルの内容は以下の様にしました。
version: '3' services: wordpress: image: wordpress:latest depends_on: - mysql ports: - "10080:80" env_file: .env mysql: image: mysql:5.7 volumes: - "./.data/db:/var/lib/mysql" env_file: .env
記述の内容を簡単に解説しますと
version 定義ファイルの書式バージョン(現在は3が最新)
services アプリケーションの要素名
image ベースとするコンテナイメージの指定
depends_on コンテナの依存関係の指定(今回の例では「wordpress」サービスは「mysql」サービスに依存します)
ports 起動ポートの指定
volumes ボリュームマウントの指定
env_file 環境変数を定義したファイルの指定
となっています。
続いて、環境定義ファイル「.env」を同ディレクトリに作成します。
$ touch .env $ vi .env
docker-compose.ymlでenv_file指定で省略したWordpress・MySQLの環境変数をこちらに定義していきます。
WORDPRESS_DB_HOST=mysql:3306 WORDPRESS_DB_PASSWORD=wordpress MYSQL_ROOT_PASSWORD=wordpress MYSQL_DATABASE=wordpress MYSQL_USER=wordpress MYSQL_PASSWORD=wordpress
準備が整ったら、以下のコマンドで起動します。
$ docker-compose up -d
起動できたら、Wordpressトップページにアクセスする前に、色々と確認をして見ましょう。
確認その1:プロセスの状態を確認してみます。
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------
docker_wp_mysql_1_32f5c219e1e8 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
docker_wp_wordpress_1_2ce1d5964f45 docker-entrypoint.sh apach ... Up 0.0.0.0:10080->80/tcp
※「docker ps」でも同じものが起動していることを確認できます。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06cbb76a2187 wordpress:latest "docker-entrypoint.s…" 6 hours ago Up 6 hours 0.0.0.0:10080->80/tcp docker_wp_wordpress_1_2ce1d5964f45
a0626487b83c mysql:5.7 "docker-entrypoint.s…" 6 hours ago Up 6 hours 3306/tcp, 33060/tcp docker_wp_mysql_1_32f5c219e1e8
確認その2:Wordpressコンテナから、MySQLコンテナへPINGが通るか確認してみます。Wordpressコンテナへexecで入り、コマンドを使えるよう準備してから実行します。
$ docker-compose exec wordpress bash # apt-get update # apt-get -y install iputils-ping # ping mysql
PING mysql (xxx.xxx.xxx.xxx) 56(84) bytes of data.
64 bytes from docker_wp_mysql_1_32f5c219e1e8.docker_wp_default (xxx.xxx.xxx.xxx): icmp_seq=1 ttl=64 time=0.098 ms
64 bytes from docker_wp_mysql_1_32f5c219e1e8.docker_wp_default (xxx.xxx.xxx.xxx): icmp_seq=2 ttl=64 time=0.107 ms
応答を確認できました。ついでにWordpressのlatestイメージの中で起動しているApache・phpのバージョンも確認してみます。
# apachectl -v
Server version: Apache/2.4.25 (Debian)
Server built: 2018-11-03T18:46:19
# php -v
PHP 7.2.16 (cli) (built: Mar 9 2019 01:49:12) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.16, Copyright (c) 1999-2018, by Zend Technologies
確認その3:指定したボリュームマウントも機能しているか確認してみます。
$ ls ./.data/db/
auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 mysql private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 performance_schema public_key.pem server-key.pem wordpress
MySQLのデータディレクトリがホスト側にちゃんとありました。
それでは最後に、ブラウザから「http://localhost:10080」へアクセスしてみます。無事にWordpressのトップページが表示されたでしょうか。
今回はDocker Composeを使用してのWordpress環境の構築・起動について確認しました。
次回もDockerComposeについて、今回よりも踏み込んで確認していきたいと思います。
株式会社 パブリックリレーションズ 〒064-0807 北海道札幌市中央区南7条西1丁目13番地 弘安ビル5階 011-520-1800 011-520-1802