docker-compose

Docker Composeのインストール (Getting Startedの手順)

More than 1 year has passed since last update.

docker-composeをインストールして動かしてみる。

手順は公式サイトのインストール手順とGetting Startedに従う。
https://docs.docker.com/compose/install/
https://docs.docker.com/compose/gettingstarted/

環境

"Ubuntu"
VERSION="14.04.5 LTS, Trusty Tahr"

インストール

$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.17.1, build 6d101fb

docker-composeのバージョンは、下記からLatest Releaseのものを使用する。
https://github.com/docker/compose/tags

docker-composeを動かす

流れとしては、

  1. コンテナ内で動くpythonアプリを作成する (app.py)
  2. Docker build時に必要なpythonモジュールを列挙したファイルを作成しておく (requirements.txt)
  3. Flaskアプリをコンテナ内に読み込んで実行するDockerfileを作成する
    1. pythonイメージをベースにする
    2. build時Dockerfileと同一ディレクトリを /code として追加する
    3. ワークディレクトリを /codeにする
    4. ビルド時に取り込んだrequirements.txtに列挙されたモジュールをpip installする
    5. ビルド時に取り込んだapp.pyを実行する
  4. docker-compose.ymlを作成する
    1. webとredisのサービスを作成する
    2. webサービスはDockerfileのビルドをポートマッピングを5000:5000として行う
    3. redisサービスは、redisのイメージを使用する
  5. docker-composeを実行する

セットアップを行う

プロジェクトディレクトリを作成する

$ mkdir composetest
$ cd composetest/

docker起動後に動かすアプリを作成する

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 を作成する

Dockerfileのビルド時にpip installするモジュールを列挙しておく

flask
redis

Dockerfileの作成

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

docker-compose.ymlを作成する

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

Composeを使って、ビルドしてアプリを動かす

$ docker-compose up

ホストから接続確認

$ curl http://localhost:5000/