Docker Compose

トップ > Docker > Docker Compose

目次

Docker Composeとは

Docker Compose は、Webサーバコンテナと DBサーバコンテナなど、関連する複数のコンテナをまとめて管理するツールです。

Docker Composeをインストールする

https://github.com/docker/compose/releases の記述に従い、インストールします。

Shell
# 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 を作成します。このディレクトリ名は、イメージ名、コンテナ名、ネットワーク名などのプレフィックスとして使用されます。

Shell
# mkdir ./work1
# cd ./work1

Docker Compose に必要なファイルを作成します。このサンプルでは、Python ベースの Webアプリケーションコンテナ(web)と、メモリキャッシュコンテナ(radis)の 2つのコンテナを作成します。

Shell
# 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アプリケーションです。

app.py
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 パッケージを列挙します。

requirements.txt
flask
redis

app.py を組み込む webコンテナをビルドするための Dockerfile を作成します。

Dockerfile
FROM python:3.6
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py

上記で作成する web コンテナと、標準の redis コンテナからなるサービスを定義します。

docker-compose.yml
version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis

docker-compose コマンドを用いて、web コンテナと redis コンテナを起動します。必要に応じてダウンロード、ビルドなどが自動的に行われます。

Shell
# docker-compose up -d

http://localhost:5000/ にアクセスすることで、web アプリケーションを実行することができます。アクセスする度に、メモリキャッシュに保存されたアクセス回数がカウントアップしていきます。

Shell
# 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 イメージなどが作成されていることが分かります。

Shell
# 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 すると、修正がコンテナに反映されます。

Shell
# vi ./app.py
# docker-compose up -d             Hello! を Hello!!! に修正
# curl http://localhost:5000/
Hello World!!! I have been seen 4 times.

docker-compose.yml ファイルの詳細については下記のリンクを参照してください。


Copyright (C) 2019 杜甫々
初版:2019年9月1日 最終更新:2019年9月1日
http://www.tohoho-web.com/docker/compose.html