正式にリリースしたみたいなので
いれてみました
docker-composeとは
公式サイトより引用
dockerを持つマルチコンテナ分散アプリケーションを定義し、
実行している方法です。
自分の解釈
dockerのコンテナの設計(?)みたいなイメージ
間違っていたらすいません
もともとはfigというツールだったみたいです
インストール
からBoot2Dockerを起動する
docker-composeをダウンロードして
パーミッションを変更する
curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose sudo pip install -U docker-compose #pipおよびpythonがないと言われたのでインストールする #(エラーメッセージをとっていませんでした)
pythonとpipをインストールする
#pythonのダウンロードとインストール wget http://www.tinycorelinux.net/5.x/x86/tcz/python.tcz && tce-load -i python.tcz && rm -f python.tcz #バージョン確認 python --version # python 2.7.7が出力される #pipのダウンロードとインストール curl -LO https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py && sudo /usr/local/bin/python2.7 ez_setup.py && rm ez_setup.py sudo /usr/local/bin/easy_install-2.7 pip
再度、docker-composeをインストールする
sudo pip install -U docker-compose #バージョン確認 docker-compose --version # docker-compose 1.1.0が出力される
docker-composeを動かしてみる
公式サイトにあるquick-startを実行してみる
http://docs.docker.com/compose/#quick-start
ざっくりいうと
4つのファイルを作ってcomposeを実行です
作業用のフォルダを作成する
mkdir composetest cd composetest
vi app.py
下記のソースをコピペする
from flask import Flask from redis import Redis import os 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)
たぶんimport(require)で使用しているの設定です
vi requirements.txt
下記の内容をコピペする
flask redis
Dockerのファイルを作成する
vi Dockerfile
下記の内容をコピペする
FROM python:2.7 ADD . /code WORKDIR /code RUN pip install -r requirements.txt
サービスの設定する
vi docker-compose.yml
下記をコピペする
web: build: . command: python app.py ports: - "5000:5000" volumes: - .:/code links: - redis redis: image: redis
composeを動かしてみる
docker-compose up
出力結果は以下のとおり
Successfully built 08bef0684f7d Attaching to composetest_redis_1, composetest_web_1 redis_1 | [1] 27 Feb 04:37:00.500 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf redis_1 | _._ redis_1 | _.-``__ ''-._ redis_1 | _.-`` `. `_. ''-._ Redis 2.8.19 (00000000/0) 64 bit redis_1 | .-`` .-```. ```\/ _.,_ ''-._ redis_1 | ( ' , .-` | `, ) Running in stand alone mode redis_1 | |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 redis_1 | | `-._ `._ / _.-' | PID: 1 redis_1 | `-._ `-._ `-./ _.-' _.-' redis_1 | |`-._`-._ `-.__.-' _.-'_.-'| redis_1 | | `-._`-._ _.-'_.-' | http://redis.io redis_1 | `-._ `-._`-.__.-'_.-' _.-' redis_1 | |`-._`-._ `-.__.-' _.-'_.-'| redis_1 | | `-._`-._ _.-'_.-' | redis_1 | `-._ `-._`-.__.-'_.-' _.-' redis_1 | `-._ `-.__.-' _.-' redis_1 | `-._ _.-' redis_1 | `-.__.-' redis_1 | redis_1 | [1] 27 Feb 04:37:00.506 # Server started, Redis version 2.8.19 redis_1 | [1] 27 Feb 04:37:00.506 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. redis_1 | [1] 27 Feb 04:37:00.506 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. redis_1 | [1] 27 Feb 04:37:00.506 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. redis_1 | [1] 27 Feb 04:37:00.507 * The server is now ready to accept connections on port 6379 web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) web_1 | * Restarting with stat
こんな感じの画面が表示されれば成功っぽい
docker-compose up -d
下記の内容が出力
Recreating composetest_redis_1... Recreating composetest_web_1...
docker-compose ps
下記の内容が出力
Name Command State Ports ---------------------------------------------------------------------------------- composetest_redis_1 /entrypoint.sh redis-server Up 6379/tcp composetest_web_1 python app.py Up 0.0.0.0:5000->5000/tcp
よくわかっていないのですが
公式サイトにあったので実行してみた
docker-compose run web env
下記の内容が出力された
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=676cdd5f983e TERM=xterm COMPOSETEST_REDIS_1_PORT=tcp://172.17.0.6:6379 COMPOSETEST_REDIS_1_PORT_6379_TCP=tcp://172.17.0.6:6379 COMPOSETEST_REDIS_1_PORT_6379_TCP_ADDR=172.17.0.6 COMPOSETEST_REDIS_1_PORT_6379_TCP_PORT=6379 COMPOSETEST_REDIS_1_PORT_6379_TCP_PROTO=tcp COMPOSETEST_REDIS_1_NAME=/composetest_web_run_1/composetest_redis_1 COMPOSETEST_REDIS_1_ENV_REDIS_VERSION=2.8.19 COMPOSETEST_REDIS_1_ENV_REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-2.8.19.tar.gz COMPOSETEST_REDIS_1_ENV_REDIS_DOWNLOAD_SHA1=3e362f4770ac2fdbdce58a5aa951c1967e0facc8 COMPOSETEST_WEB_1_PORT=tcp://172.17.0.8:5000 COMPOSETEST_WEB_1_PORT_5000_TCP=tcp://172.17.0.8:5000 COMPOSETEST_WEB_1_PORT_5000_TCP_ADDR=172.17.0.8 COMPOSETEST_WEB_1_PORT_5000_TCP_PORT=5000 COMPOSETEST_WEB_1_PORT_5000_TCP_PROTO=tcp COMPOSETEST_WEB_1_NAME=/composetest_web_run_1/composetest_web_1 COMPOSETEST_WEB_1_ENV_LANG=C.UTF-8 COMPOSETEST_WEB_1_ENV_PYTHON_VERSION=2.7.9 REDIS_PORT=tcp://172.17.0.6:6379 REDIS_PORT_6379_TCP=tcp://172.17.0.6:6379 REDIS_PORT_6379_TCP_ADDR=172.17.0.6 REDIS_PORT_6379_TCP_PORT=6379 REDIS_PORT_6379_TCP_PROTO=tcp REDIS_NAME=/composetest_web_run_1/redis REDIS_ENV_REDIS_VERSION=2.8.19 REDIS_ENV_REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-2.8.19.tar.gz REDIS_ENV_REDIS_DOWNLOAD_SHA1=3e362f4770ac2fdbdce58a5aa951c1967e0facc8 REDIS_1_PORT=tcp://172.17.0.6:6379 REDIS_1_PORT_6379_TCP=tcp://172.17.0.6:6379 REDIS_1_PORT_6379_TCP_ADDR=172.17.0.6 REDIS_1_PORT_6379_TCP_PORT=6379 REDIS_1_PORT_6379_TCP_PROTO=tcp REDIS_1_NAME=/composetest_web_run_1/redis_1 REDIS_1_ENV_REDIS_VERSION=2.8.19 REDIS_1_ENV_REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-2.8.19.tar.gz REDIS_1_ENV_REDIS_DOWNLOAD_SHA1=3e362f4770ac2fdbdce58a5aa951c1967e0facc8 WEB_PORT=tcp://172.17.0.8:5000 WEB_PORT_5000_TCP=tcp://172.17.0.8:5000 WEB_PORT_5000_TCP_ADDR=172.17.0.8 WEB_PORT_5000_TCP_PORT=5000 WEB_PORT_5000_TCP_PROTO=tcp WEB_NAME=/composetest_web_run_1/web WEB_ENV_LANG=C.UTF-8 WEB_ENV_PYTHON_VERSION=2.7.9 WEB_1_PORT=tcp://172.17.0.8:5000 WEB_1_PORT_5000_TCP=tcp://172.17.0.8:5000 WEB_1_PORT_5000_TCP_ADDR=172.17.0.8 WEB_1_PORT_5000_TCP_PORT=5000 WEB_1_PORT_5000_TCP_PROTO=tcp WEB_1_NAME=/composetest_web_run_1/web_1 WEB_1_ENV_LANG=C.UTF-8 WEB_1_ENV_PYTHON_VERSION=2.7.9 LANG=C.UTF-8 PYTHON_VERSION=2.7.9 HOME=/root docker@boot2docker:~/composetest$
ストップする場合は以下のコマンド
docker-compose stop #ストップしたらしい #Stopping composetest_web_1... #Stopping composetest_redis_1... >|| どういう状況になっているのか 確認した >|sh| docker-compose ps
ステータスがExitになっているので
終了しているかんじです
Name Command State Ports ------------------------------------------------------------------ composetest_redis_1 /entrypoint.sh redis-server Exit 0 composetest_web_1 python app.py Exit 0
次はRailsの環境にチャレンジします
Docker入門 Immutable Infrastructureを実現する
- 作者: 松原豊,米林正明
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/25
- メディア: Kindle版
- この商品を含むブログ (5件) を見る