🖥

Docker | docker-compose の基本 ( 公式チュートリアルより )

2023/08/26に公開

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 と ウェブサーバー、両方が起動しているのが分かる。

image.png

コンテナの確認

$ 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/ にアクセスする。

image.png

ボリュームの動作確認

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

ウェブページに表示されるメッセージを変えてみる

ローカルのファイルを直接マウントしているので、手元のエディタも使える。

image.png

変更

試しに、メッセージを大文字に変えてみると

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/ でもメッセージが変わっているのが分かる。

image.png

サービスを停止する

$ docker-compose down

でサービスの停止(各コンテナの終了)が出来る。

環境

  • Docker version 17.03.1-ce, build c6d412e

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2017-05-26

Discussion