08.複数コンテナを連携して利用する方法 docker-compose

statue of liberty, planes, jets-1929668.jpg

前レッスンではコンテナイメージの作成について学びました。

実務ではコンテナイメージは「1コンテナ1プロセス」で動作させる事を推奨としています。それを踏まえて今回は複数コンテナで連携して動作させる方法について説明します。

マルチコンテナでの運用について

今回は以下のコンテナ構成でWordpress環境を構築します。

複数のコンテナがある場合、dockerコマンドで操作を行う場合以下の手順になります。

1.各コンテナ連携用のコンテナ内ネットワークを作成
2.参照されるコンテナの実行(ここではDBコンテナが参照されるので先にDBコンテナを実行する)
3.参照するコンテナの実行(ここではWordpressコンテナを実行する)

実際にコマンド実行する際には、DB接続用のユーザー名やパスワードの指定、データ保存場所の指定などもありコマンド内容が長くなってしまいます。

docker network create -d bridge test-network
docker container run --network test-network --name test-mysql -e MYSQL_ROOT_PASSWORD=passwd -d mysql:5 
docker container run --network test-network --name test-wordpress --link test-mysql:mysql -d -p 8080:80 wordpress

コンテナ実行のコマンドも長く、実行順番も気をつける必要があり正直面倒で問題があります。上記の様な問題を解決するために、docker-composeなるツールがあります。

docker composeとは?

複数のコンテナを実行する際には、docker composeを用いる方が圧倒的に作業が楽になります。

所定のyaml形式の設定ファイルにコンテナの関係性を記載し、実行することで連携した形態でコンテナが生成・実行されます。

しかしdocker composeはLinux環境においては、標準インストールされていませんのでインストールを行いましょう!

docker composeのインストール

今回は、Cloud9にdocker compose Ver2系統をインストール実施します。

オフィシャルマニュアル

まずは保存先のディレクトリを作成します。

mkdir -p ~/.docker/cli-plugins/

次に、githubで公開されているLinuxバイナリファイルを取得します。

curl -SL https://github.com/docker/compose/releases/download/v2.1.1/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

最後に取得したバイナリファイルに実行権限を付与します。

chmod +x ~/.docker/cli-plugins/docker-compose

インストール後は動作確認してください。

docker compose version

docker-compose.ymlの作成

docker composeのインストールが完了後は、複数のコンテナの関係性を明記する「docker-compose.yml」を作成します・

yamlファイルの内容は以下となります。

version: '3'
services:
  コンテナ名:
    コンテナ詳細を記述

  コンテナ名:
    コンテナ詳細を記述
    
networks:
  ネットワーク名:
    driver: ネットワークタイプを記述
    
volumes:
  ボリューム名:
    driver: ボリュームタイプを記述

実際に以下準備しました。(コメントは適時削除して利用してください)

version: '3'
services:
  db:
    image: mysql:5.7  #利用するコンテナイメージを記述
    networks:     #利用するネットワークを記述
      - blog_net
    volumes:
      - db_volume:/var/lib/mysql  #保存領域をDockerホスト側との割当
    restart: always                 #コンテナの終了ステータスに関係なく、常にコンテナの再起動を試みます
    env_file: env.cfg               #パスワードやDBなどの設定情報

  wordpress:
    depends_on:   #依存するコンテナ情報を明記。今回WordpressはDBが必要となる
      - db
    networks: 
      - blog_net
    image: wordpress:latest     #利用するコンテナイメージを記述
    volumes:
      - ./wordpress:/var/www/html  #コンテンツ保存領域の割当
    ports: 
      - "8080:80"
    restart: always
    env_file: env.cfg
    
networks:
  blog_net:
    driver: bridge  #コンテナで利用するネットワーク指定
    
volumes:
  db_volume:
    driver: local     #コンテナで利用する保存領域の指定

ネットワークやボリュームについては以後のレッスンで後述します。

上記では「 env_file: env.cfg 」とDBやWordpressなど接続情報を別ファイルで準備しています。その別ファイルも新規作成します。

env.cfgのファイル内容は以下の通りです。

MYSQL_ROOT_PASSWORD=root_pass
MYSQL_DATABASE=wordpress_db
MYSQL_USER=wordpress_user
MYSQL_PASSWORD=wordpress_pass

WORDPRESS_DB_HOST=db:3306
WORDPRESS_DB_NAME=wordpress_db
WORDPRESS_DB_USER=wordpress_user
WORDPRESS_DB_PASSWORD=wordpress_pass

DB名やユーザー名、パスワードなどの情報を記載し、docker-compose.ymlと別ファイルにすることにより拡張性を保っています。

それぞれ設定ファイルを記述後は保存してください。

docker composeの 実行

各種設定ファイルを記述したら準備完了です。docker composeを用いて複数コンテナを連携して実行させましょう。

docker-compose.ymlファイルのある場所に移動します。

以下コマンドで実行します。(-dオプションを指定することによりバックグラウンドで動作します)

docker compose up -d

実行後はコンテナ稼働している様子がわかります。

docker container ls

また今回はWordpressを稼働させましたのでプレビューで動作確認してみましょう。

無事に複数のコンテナで動作したことが判ったはずです。

docker composeで状況確認

稼働したコンテナですが状況確認ができます。

docker compose ls

docker-compose.ymlで指定したコンテナ数の状況が確認できます。

またコンテナ一つずつ状況確認したい場合には、以下コマンドとなります。

docker compose ps

最後にログの確認をしてみましょう。

docker compose logs

コンテナ毎のログが確認できます。

docker composeの 停止

docker composeで起動した複数のコンテナですが、停止の際には以下コマンドとなります。

docker compose down

改めて状況確認してください。

docker compose ls

無事に停止しました。

まとめ

以上、docker composeでの複数コンテナでの操作方法についての説明でした。

次回はdocker composeで稼働したWordPressの操作を少し行った後に、Dockerの保存領域やネットワーク機能について説明をします。

戻る: AWS応用コース > AWS応用-コンテナ