今更ながら公式ドキュメントに従ってdocker-composeを試してみたのでメモ
Prerequisites
まずはインストールから。
今回はdocker-machine(docker-toolbox)で行います
$docker-machine ssh
インストール手順に従ってインストール
$ sudo su
# curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod a+x /usr/local/bin/docker-compose
※わざわざrootになって実行したあとに気づいたのですが sudo -i
使えばいいよって公式に書いてありましたね
確認
$ docker-compose --version
docker-compose version 1.7.1, build 0a9ab35
Step 1: Setup
-
テスト用のディレクトリを作成
$ mkdir composetest $ cd composetest
-
app.py
を作成$ vi app.py
app.pyfrom flask import Flask from redis import Redis app = Flask(__name__) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): redis.incr('hits') return 'Hello World! I have been seen %s times.' % redis.get('hits') if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
Flaskってなんだろって調べたらPython用の軽量なフレームワークみたいですね。
参考:http://a2c.bitbucket.org/flask/app.pyの中身はアクセスするたびに
カウンターをインクリメントしていく,
カウンターはredisで保持って感じかな・・・? -
requirements.txt
を作成pip install 用にrequirements.txtを作成します
$ cat << EOF > requirements.txt flask redis EOF
Step 2: Create a Docker image
Docker imageの作成
-
Dockerfileの作成
DockerfileFROM python:2.7 ADD . /code WORKDIR /code RUN pip install -r requirements.txt CMD python app.py
-
ビルド
$ docker build -t web .
-t
オプションで名前:タグ付け
Step 3: Define services
いよいよ本命 docker-compose.yml
!
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: redis
-
build
: Dockerfileのビルド。Dockerfileのディレクトリを指定 -
ports
: ホストマシンとコンテナのポートマッピングを指定 -
volumes
: ホストマシンのディレクトリをコンテナにマウント。host:container -
depends_on
:サービスの依存関係を指定。この場合 redis → web の順番で起動する -
image
: コンテナイメージを指定
yamlでかけるので簡潔でいいですね~
わかりやすいです
Step 4: Build and run your app with Compose
-
docker-compose.ymlで定義したサービス郡を起動
$ docker-compose up
おお~、特に問題なさそうです。
ちゃんとredis → web の順番で起動してますね。 http://xxx:5000 にアクセス
docker machine 上で実行したため、
まずはdocker machine のipを調べます
$ docker-machine ip
192.168.99.100
おお!!!!
ちゃんとアクセスするたびに増えているみたいです
Step5 では
docker-compose up -d
docker-compose run
などの説明がされていましたが今回は割愛
感想
複数コンテナを動かすときはかなり楽できそうです。
docker-compose.ymlがわかりやすいのですごくとっつきやすいですね。
色々と試す時の環境構築などにも使っていきたいと思います