masalibの日記

システム開発、運用と猫の写真ブログです

Windows版のBoot2Dockerにdocker-composeをいれてみた

正式にリリースしたみたいなので
いれてみました

docker-composeとは

公式サイトより引用
 dockerを持つマルチコンテナ分散アプリケーションを定義し、
 実行している方法です。

自分の解釈
 dockerのコンテナの設計(?)みたいなイメージ
 間違っていたらすいません
 もともとはfigというツールだったみたいです

インストール

f:id:masalib:20150220200752j:plain
から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が出力される

参考サイト
http://docs.docker.com/compose/install/

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の環境にチャレンジします