Docker Compose は、Webサーバコンテナと DBサーバコンテナなど、関連する複数のコンテナをまとめて管理するツールです。
https://github.com/docker/compose/releases の記述に従い、インストールします。
# curl -L \ https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` \ -o /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose
ワークディレクトリ work1 を作成します。このディレクトリ名は、イメージ名、コンテナ名、ネットワーク名などのプレフィックスとして使用されます。
# mkdir ./work1 # cd ./work1
Docker Compose に必要なファイルを作成します。このサンプルでは、Python ベースの Webアプリケーションコンテナ(web)と、メモリキャッシュコンテナ(radis)の 2つのコンテナを作成します。
# ls -l -rw-r--r--. 1 root root 96 9月 4 21:30 Dockerfile -rw-r--r--. 1 root root 309 9月 4 21:30 app.py -rw-r--r--. 1 root root 156 9月 4 21:30 docker-compose.yml -rw-r--r--. 1 root root 12 9月 4 21:30 requirements.txt
まず app.py を作成します。メモリキャッシュ(redis)からアクセス回数を読み取り、アクセス回数をメッセージに含めて返却する簡単な Webアプリケーションです。
from flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): redis.incr('hits') return 'Hello World! I have been seen %s times.\n' % redis.get('hits').decode() if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
app.py を実行するのに必要となる Python パッケージを列挙します。
flask redis
app.py を組み込む webコンテナをビルドするための Dockerfile を作成します。
FROM python:3.6 ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD python app.py
上記で作成する web コンテナと、標準の redis コンテナからなるサービスを定義します。
version: '2' services: web: build: . ports: - "5000:5000" volumes: - .:/code depends_on: - redis redis: image: redis
docker-compose コマンドを用いて、web コンテナと redis コンテナを起動します。必要に応じてダウンロード、ビルドなどが自動的に行われます。
# docker-compose up -d
http://localhost:5000/ にアクセスすることで、web アプリケーションを実行することができます。アクセスする度に、メモリキャッシュに保存されたアクセス回数がカウントアップしていきます。
# curl http://localhost:5000/ Hello World! I have been seen 1 times. # curl http://localhost:5000/ Hello World! I have been seen 2 times. # curl http://localhost:5000/ Hello World! I have been seen 3 times.
下記で確認すると、work1_web_1, work1_redis_1 コンテナ、work1_web イメージなどが作成されていることが分かります。
# docker ps => work1_web_1, work1_redis_1 コンテナ # docker images => work1_web イメージ # docker network ls => work1_default ネットワーク # docker volume ls => 名無しボリューム
app.py を少し修正して再度 docker-compose up すると、修正がコンテナに反映されます。
# vi ./app.py
# docker-compose up -d Hello! を Hello!!! に修正
# curl http://localhost:5000/
Hello World!!! I have been seen 4 times.
docker-compose.yml ファイルの詳細については下記のリンクを参照してください。