Translate

2015年3月16日月曜日

The Docker User Guide: Docker Compose を翻訳してみた

もともと複数のアプリケーションを1つのサーバで動かすテンプレートを
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がいかにして動作するかに関する基本について確認しました。

続いて、DjangoRailsWordpressのクイックスタートを試しましょう
コマンド設定ファイル環境変数の詳細情報についてはリファレンスガイドを参照してください

0 件のコメント:

Dockerのバージョンが17.xになり、Ubuntu Serverへのインストールがまたちょこっと変わった

ひさしぶりにDockerサイトへ行ったら Dockerのバージョンがかわっていた.. しかも昔Solarisとかがやったマイナーバージョンを メジャーバージョンに繰り上げしやがった。 で、 今後は毎月リリースするらしい。 今は2017年3月だから17.3.x...