LoginSignup
0
0

More than 1 year has passed since last update.

Docker Compose を使ってみた

Posted at

インストール

以下のコマンドを実行し 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 コマンドを実行することなく、変更がアプリケーションに反映されます。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0