Dockerでつくりたかったので、Composeに関する概要も必要かと思い
Docker Compose
https://docs.docker.com/compose/
を翻訳してみました。
複雑なアプリを一発で動かせるようにするには docker-compose.yml ファイルを作る
必要がありそうなことはわかりました。
以下、勝手翻訳した内容です。
参照の際は at your own risk でお願いします。
--------
Docker Compose
ComposeはDockerを使って複雑なアプリケーションを定義、実行するためのツールです。Composeを使えば、複数コンテナを使用するアプリケーションを単一のファイルで定義することができ、単一のコマンドでアプリケーションを必要なだけ実行状態までスピンアップします。
Composeは開発環境、サーバ群の開始やCI(継続的インテグレーション)にとって素晴らしいツールです。我々は製品開発にComposeを使うことはまだ推奨しません。
Composeの使用は、基本的に3ステップです。
最初に、アプリケーション環境をDockerfileを使って定義します。Dockerfile化によりどこでも再現可能にすることができます:
FROM python:2.7
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code
CMD python app.py
次に、アプリケーションのメイク方法をdocker-compose.yml上に定義して、分離した環境で動作できるようにします:
web:
build: .
links:
- db
ports:
- "8000:8000"
db:
image: postgres
最後に、「docker-compose up」を実行し、アプリケーション全体の開始および実行を構成(compose)します。
Composeはアプリケーションライフサイクル全体を管理するためのコマンドをもっています;
- サービスの開始・終了・再ビルド
- 実行中サービスのステータス参照
- 実行中サービスのログアウトプットのストリーム
- サービスに対するワンオフ(1回限りの)コマンド実行
Compose ドキュメンテーション
クイックスタート
Composeを使って簡単なPython Webアプリケーションの実行までの練習を使って始めてみましょう。Pyhonの知識が少し必要ですが、Pyhonをよく知らなくてもここでのデモンストレーションの概要は把握できるはずです。
インストールとセットアップ
最初に、DockerとComposeをインストールします。
次に、プロジェクトのためのディレクトリを作成します:
$ mkdir composetest
$ cd composetest
ディレクトリ内部で、app.pyを作成し、Flaskフレームワークを使ったRedisの値を足していく簡単な Web アプリケーションを構築します:
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)
次に、Python依存関係を requirements.txt と呼ばれるファイルに定義します:
flask
redis
Dockerイメージの作成
すべてのアプリケーション依存するパッケージを含むDockerイメージを作成します。Dockerfile と呼ばれるファイルを使ってどうやってイメージをビルドするかを定義します:
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
これは Docker にPython、あなたのコード、そしてPython依存関係をDockerイメージに含める問い合わせをします。詳細はDocerユーザガイドやDockerfileリファレンスを参照してください。
サービスの定義
次に、docker-compose.ymlを使ってサービスセットを定義します:
web:
build: .
command: python app.py
ports:
- "5000:5000"
volumes:
- .:/code
links:
- redis
redis:
image: redis
このファイルでは2つのサービスを定義しています:
- 「web」:カレントディレクトリ上のDockerfileからビルドされます。 ここでは、イメージ内で python app.py コマンドを実行し、コンテナ側5000番ポートをホスト上の5000番ポートに露出させ、redisサービスと通信し、そしてカレントをコンテナ内部へマウントしており、イメージのリビルド無しでコードを実行できます。
- 「redis」:Docker Hubリポジトリから取得した公式イメージredisを使用します。
Composeを使ったアプリケーションのビルドおよび実行
ここで「docker-compose up」を実行すれば、ComposeがRedisイメージをpullし、アプリケーションコードのためのイメージをビルドし、開始します:
$ docker-compose up
Pulling image redis...
Building web...
Starting composetest_redis_1...
Starting composetest_web_1...
redis_1 | [8] 02 Jan 18:43:35.576 # Server started, Redis version 2.8.3
web_1 | * Running on http://0.0.0.0:5000/
これで、Dockerデーモンホスト(もしBoot2dockerを使っているのであれば、「boot2docker ip」にてIPアドレスを問い合わせてください)のポート5000番でlistenしているアプリケーションを参照できます。
バックグラウンド実したいのであれば、「-d」フラグを「docker-compose up」コマンドに追加してください。「docker-compose ps」を使って何が現在実行中かを確認できます:
$ docker-compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------
composetest_redis_1 /usr/local/bin/run Up
composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp
「docker-compose run」コマンドでサービスに対してワンオフコマンドを許可します。たとえば、どんな環境変数が「web」サービス上で有効かを確認するには:
$ docker-compose run web env
「docker-compose --help」で他の有効なコマンドを確認できます。
もし「docker-compose up -d」で開始したのであれば、サービスを停止したいのであれば、一度次のように実行して停止します:
$ docker-compose stop
このセクションでは、Composeがいかにして動作するかに関する基本について確認しました。
続いて、Django、Rails、Wordpressのクイックスタートを試しましょう
コマンド、設定ファイル 、環境変数の詳細情報についてはリファレンスガイドを参照してください
0 件のコメント:
コメントを投稿