🖥
Docker | docker-compose の基本 ( 公式チュートリアルより )
Get started with Docker Compose - Docker Documentation より
準備
デモ用のレポジトリをクローンする(非公式)。
$ git clone git@github.com:YumaInaura/study-docker.git
$ cd study-docker/composetest
もしくは、以下のファイルを手元にそれぞれ作成する。
1. python でウェブサーバーを起動するスクリプト
redis でアクセス回数を記録する。
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)
2. python のモジュールをインストールするためのファイル
flask
redis
3. ウェブサーバーのイメージを作るための Dockerfile
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
4. ウェブサーバーと Redis サーバーの起動手順を書いた docker-compose.yml
二つのコンテナを実行するための記述。
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
redis:
image: "redis:alpine"
動作を試す
compose の実行
$ docker-compose up
これだけで docker-compose.yml に書かれた手順でコンテナが作成される。
redis と ウェブサーバー、両方が起動しているのが分かる。
コンテナの確認
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------
composetest_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
composetest_web_1 python app.py Up 0.0.0.0:5000->5000/tcp
ブラウザで確認
http://localhost:5000/ にアクセスする。
ボリュームの動作確認
docker-compose.yml に書いた volumes:
で、ローカルとウェブサーバーのディレクトリをマウントしているので、手元からファイルを直接追加したり、削除したり出来る。
ローカルにファイルを作ると
echo 'Hello docker compose!' > hello.txt
ウェブサーバーにもファイルが出来ている。
$ docker exec composetest_web_1 cat hello.txt
Hello docker compose!
消すことも出来る
$ rm hello.txt
$ docker exec composetest_web_1 cat hello.txt
cat: can't open 'hello.txt': No such file or directory
ウェブページに表示されるメッセージを変えてみる
ローカルのファイルを直接マウントしているので、手元のエディタも使える。
変更
試しに、メッセージを大文字に変えてみると
app.py
- return 'Hello world! I have been seen {} times.\n'.format(count)
+ return 'HELLO WORLD! I have been seen {} times.\n'.format(count)
確認
http://localhost:5000/ でもメッセージが変わっているのが分かる。
サービスを停止する
$ docker-compose down
でサービスの停止(各コンテナの終了)が出来る。
環境
- Docker version 17.03.1-ce, build c6d412e
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2017-05-26
Discussion