【Docker】第8回 Docker Composeで複数のコンテナを連携する


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階
メールでのお問い合わせはこちら

  • この記事をシェアする