はじめに
fig って何?
最近 Docker に買収された Orchard の fig というツールを触ってみました。
- fig
- Docker社がマルチコンテナ構成ツール「Fig」を採用。開発した社員2名のOrchardを買収
- Figを使って複数のDockerコンテナをコマンド一発で立ち上げる
- Figを使って無限Dockerで遊ぼう
fig とはマルチコンテナオーケストレーションツールで複数の Docker コンテナを組み合わてアプリケーションを構成する際に関連する依存関係を YAML 形式の設定ファイルで記述しておくことで Docker によるアプリケーション環境構築をお手軽にするツール(という印象)です。
Dockerfile と何がちゃうの?
Dockerfile と似たような印象ですが、Dockerfile はコンテナ構築、fig はコンテナで構成されるアプリケーションの構築に…という使い分けでしょうか…
準備
環境
- Amazon Linux(Amazon Linux AMI release 2014.03)
- Docker 1.1.2
fig のインストール
sudo pip install -U fig
ちなみに pip がインストールされていない場合には…
sudo yum install python-pip
fig の確認
fig
以下のように出力されました。
Punctual, lightweight development environments using Docker.
Usage:
fig [options] [COMMAND] [ARGS...]
fig -h|--help
Options:
--verbose Show more output
--version Print version and exit
-f, --file FILE Specify an alternate fig file (default: fig.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name)
Commands:
build Build or rebuild services
help Get help on a command
kill Kill containers
logs View output from containers
ps List containers
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
up Create and start containers
Quick Start を真似る
こちら を写経してみます。
作業用のディレクトリ作成
mkdir ~/figtest
cd ~/figtest
flask アプリケーションを作成
flask って Python の Sinatra みたいなもの(だと思う)…
from flask import Flask from redis import Redis import os app = Flask(__name__) redis = Redis(host="redis_1", 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 用のアプリケーションを作成します。
(追記)
よく見たら上記のスクリプトほんの数行ですがアクセスカウントを Redis に放り込んで表示しているようです。こんな数行で…恐ろしい(個人的に)
関連パッケージインストール用テキストファイルの作成
pip では -r オプションの引数に下記のようなテキストファイルを渡すと書かれたパッケージをインストールしてくれます。
flask
redis
Dockerfile の作成
ようやく Dockerfile です。
FROM python:2.7 ADD . /code WORKDIR /code RUN pip install -r requirements.txt
とってもシンプルですね。
fig.yaml の作成
そして fig の設定。fig.yaml を書きます。
web:
build: .
command: python app.py
ports:
- "5000:5000"
volumes:
- .:/code
links:
- redis
redis:
image: redis
以下、簡単に説明。詳細はこちらを御覧ください…
パラメータ | 意味 |
---|---|
web | 任意のアプリケーション名を指定 |
build | Dockerfile のパスを指定(多分) |
command | コンテナで実行されるコマンドを指定 |
ports | バインドするポートを指定 |
volumes | ホストのディレクトリをコンテナのマウントする為の指定 |
links | 連携するアプリケーションを指定(今回は redis アプリケーションコンテナを指定) |
redis | 任意のアプリケーション名を指定 |
image | 連携するコンテナイメージを指定 |
fig up
準備が整ったら fig up してコンテナをビルドします。
fig up
最初は多少時間がかかるのでのんびり待ちます。
fig up -d でデタッチ
fig up -d
上記のように -d オプションを付けることでデタッチモードで稼働します。
fig ps で起動しているコンテナを確認
fig ps
上記を実行すると起動中のコンテナとアプリケーションの状態を確認出来ます。
Name Command State Ports
--------------------------------------------------------
figtest_redis_1 redis-server Up 6379/tcp
figtest_web_1 python app.py Up 5000->5000/tcp
fig stop
稼働中のアプリケーションを停止したい場合に以下のように実行します。
fig stop
以下のように表示されます。
Stopping figtest_web_1...
Stopping figtest_redis_1...
この状態で fig ps を実行すると以下のように表示されました。
Name Command State Ports
------------------------------------------------
figtest_redis_1 redis-server Exit 0
figtest_web_1 python app.py Exit 0
最後に
簡単な YAML ファイルでコンテナアプリケーション環境を構築出来るのはいいですね。fig のサイトにも以下のような Rails や WordPress 環境を動かす例が掲載されています。
- Getting started with Fig and Rails
- Getting started with Fig and Django
- Getting started with Fig and WordPress
今回はホントに触ってみただけなので、次回はオリジナル(と言うほどではありませんが)のアプリケーションを動かしてみたいと思います。
元記事は、こちら