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