インストール
以下のコマンドを実行し docker-compose
コマンドをインストールします。
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` \
-o /usr/local/bin/docker-compose
実行権限を付与します。
sudo chmod +x /usr/local/bin/docker-compose
正常にインストールされたことを確認します。
[ec2-user@ip-172-31-46-239 ~]$ docker-compose --version
docker-compose version 1.16.1, build 6d1ac21
docker-compose.yml の作成
作業ディレクトリを作成し、以下の手順はすべてこのディレクトリで行います。
mkdir compose_test
cd compose_test
次の 2 つのコンテナを作成します。
- Web アプリケーション用の Flask コンテナ
- アクセスカウンタ用の Redis コンテナ
以下のファイルを作成します。
app.py
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return 'Hello World! I have been seen {} times.\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
requirements.txt
flask
redis
次に Dockerfile を作成します。
Dockerfile
FROM python
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
次に docker-compose.yml を作成します。
- web サービスは Dockerfile で作成するイメージから構築する
- redis サービスは Docker Hub から取得するイメージから構築する
- コンテナの公開用ポート 5000 を、ホストマシンのポート 8080 にポートフォワードする
- ホストマシンの compose_test ディレクトリを コンテナ内の /code ディレクトリにマウントする
docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "8080:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
以下のコマンドを実行し、コンテナを起動します(バックグラウンドで実行する場合は -d
オプションを付けます)。
docker-compose up
アプリケーションにアクセスする
もう一つターミナルを開いてアクセスします。
[ec2-user@ip-172-31-46-239 compose_test]$ curl http://localhost:8080
Hello World! I have been seen 1 times.
app.py を編集したい場合、compose_test ディレクトリと /code ディレクトリは同期しているので、ローカルで app.py を編集すれば、再度 docker-compose up コマンドを実行することなく、変更がアプリケーションに反映されます。
参考記事