たった1行で複数コンテナを起動!Docker ComposeでWordPress環境をもっと楽に管理しよう!

  1. 公開日:2017/04/19
  2. 更新日:
  3. WordPress
  4. ,
  5. 0
3
SHARES
B!

Docker For Macを使用すると、あらかじめ用意されたイメージ(テンプレート)を使用して、簡単にWordPress環境を構築することができます。ローカルの開発環境の場合、インターネット接続環境であれば、ものの数分でWordPress環境を作成することができます。また、イメージのダウンロードは初回のみで、次回以降は数秒でWordPress環境の起動、停止を行うことができます。Docker for MacによるWordPress環境の構築からカスタマイズについては、以下の記事をご参照ください。

上記の記事内で、Webサーバ(WordPress)、DBサーバ(MySQL)のコンテナ(Dockerの互いに隔離されたホスト)を作成し、dockerコマンドを使用してWordPress、MySQLの起動、停止を行いましたが、コンテナが複数になると毎回の起動、停止や、コンテナの再作成や再起動がややめんどうくさくなります。そこで、今回はdocker-composeを使用して、より簡単にコンテナを起動、停止できる方法を考えます。

Docker Composeで複数コンテナを楽に管理しよう

Docker Composeとは、Dockerに含まれるコンポーネントの一つで、コンテナの設定や情報を一元管理することができる優れものです。開発環境、商用環境による環境の使い分けはもとより、各種コンテナの設定(MySQLのrootユーザのパスワード、Webサーバのポートフォワーディング、ボリュームのマウントなど)を一括で管理することができます。

docker-compose.ymlファイルを管理する

Docker Composeを利用するためには、あらかじめdocker-compose.ymlファイルを作成する必要があります。同ファイルはYAML形式で記述されています。類似の記述方法にJSON形式があります。YAML形式では、#はコメント行を表します。また、半角スペース2つでインデントします。YAML形式でタブ(Hard Indent)は使用できませんのでご注意ください。YAML形式のファイルを使用していて、エラーが発生した場合は、大抵インデントの誤りです。YAMLlint - The YAML Validatorなどを利用して、文法誤りがないかどうか確かめてください。

では、実際にdocker-compose.ymlファイルを作成します。任意のフォルダに作成して構いませんが、後に使用するdocker-composeコマンド(Docker for Macに包含されます)は、カレントディレクトリに同ファイルが配置されている必要があります。Dropboxなどオンラインストレージ上で作成しておくことで、複数のデバイスでDockerの設定ファイルを共有できます。

# mysql
db:
  image: mysql
  container_name: db
  environment:
    MYSQL_ROOT_PASSWORD: pass
# wordpress
wordpress:
  image: ottan/wordpress
  container_name: wordpress
  links:
    - db:mysql
  ports:
    - "8080:80"
  volumes:
    - ~/Dropbox/vccw/www/wordpress/wp-content/themes:/var/www/html/wp-content/themes:cached

「cahched」オプションによるホスト、コンテナ間のボリュームの同期の高速化(2017/11/23追記)

「volumes」オプションを使用することで、ホスト側のフォルダをコンテナ側にマウントすることができましたが、マウントしたフォルダの内容の同期には時間がかかりますが、Docker for Macのバージョンアップにより、同オプションの使用による同期の速さが改善されました。これまで「docker-sync」などのRubyGem等を使用して同期を高速化する必要がありましたが、バージョンアップによりブラウザのリロード程度であれば気にならない程度の同期速度になりました。「volumes」オプションの最後にcachedを指定します。

Docker version 17.09.0-ce, build afdb6d4

では、詳しく解説します。

# mysql  ←#から始まる行はコメント行。MySQLコンテナの設定であることを任意に表す
db:  ←dbコンテナの定義。コンテナの名前は別途定義するため任意の分かりやすい名前を推奨
  image: mysql  ←コンテナに使用するイメージを定義。先頭は半角スペース2つ。また、:の後ろに半角スペース1つ
  container_name: db  ←コンテナの名前を定義。省略可能。省略した場合は、コンテナ作成時に自動的に生成される
  environment:  ←コンテナの環境変数を定義。MySQLイメージを使用する場合は、主にrootユーザのパスワードを設定
    MYSQL_ROOT_PASSWORD: pass  ←MySQLのrootユーザのパスワードを定義。先頭は半角スペース4つ
    - MYSQL_ROOT_PASSWORD=passと同義
# wordpress
wordpress:
  image: ottan/wordpress  ←冒頭でご紹介した記事でカスタマイズしたイメージ
  container_name: wordpress
  links:  ←参照するコンテナを定義
    - db:mysql  ←参照するコンテナが複数存在する場合は改行して記述
  ports:  ←ポートフォワーディング設定
    - "8080:80"  ←ポートフォワーディング設定が複数存在する場合は改行して記述
  volumes:  ←コンテナ側にマウントするホスト(Mac)側のフォルダを指定
    - ~/Dropbox/vccw/www/wordpress/wp-content/themes:/var/www/html/wp-content/themes:cached

いかがでしょうか。YAML記述法に慣れていない場合、最初は戸惑うかもしれません。XMLなどのマークアップ言語に似ていますが、YAMLはマークアップ言語ではありません。JSONに慣れている人であれば抵抗はないかもしれません。Docker Composeの詳細については、Compose ファイル・リファレンス — Docker-docs-ja 1.13.RC ドキュメントを参照してください。

Docker Composeを使ったコンテナの管理

では、docker-compose.ymlファイルを作成したら、コンテナを起動しましょう。同ファイルが配置されているフォルダに移動して、以下のコマンドを実行します。

docker-compose up -d

これまで複数のコンテナを作成する場合は、その都度docker runコマンドでオプションを指定しながら作成していましたが、docker-compose.ymlファイルで設定を一元管理することにより、たった一行でMySQL、WordPressのコンテナを起動することができるようになりました。正常に起動したかどうかを確認するためには、以下のコマンドを実行します。

docker ps

続いて、起動したコンテナを停止します。以下のコマンドを実行します。

docker-compose stop

コンテナを再度起動したい場合は、以下のコマンドを実行します。

docker-compose start

コンテナの再起動のみを行いたい場合は、以下のコマンドを実行します。

docker-compose restart

コンテナを再作成する場合は、以下のコマンドを実行します。

docker-compose stop
docker-compose rm
docker-compose up -d

一度コンテナを停止した上で、コンテナを削除し、再度作成しているだけです。このようにdocker-composeを使用すれば、コンテナが複数になった場合においても、簡単にコンテナを管理することができます。Docker for Macを使用している方は、ぜひお試しください!

この記事が気に入ったらいいねしよう!
こちらの記事も読まれています
ご意見ボード
匿名で管理人に送信されます。※送信専用です。返信はできません。
ご指摘・ご意見
Top