Docker Compose - クイックスタート・ガイド:Compose と Django
原文:Quickstart Guide: Compose and Django
https://docs.docker.com/compose/django/
このクイックスタート・ガイドでは、Compose を使って、どのようにシンプルな Django/PostgreSQLアプリケーションをセットアップ・実行するかを示します。あらかじめ、Compose のインストールが必要です。
プロジェクトの定義
アプリケーションを構築するため、3つのファイルをセットアップしていきます。まず、アプリケーションを実行するにあたり、 Docker コンテナ中には依存関係のある全てが必要になります。そのため、コンテナ中で何が必要なのかを、正確に定義しなくてはいけません。この定義に使うのが Dockerfile
と呼ばれます。まず第一に、Dockerfile は次のように構成されます:
FROM python:2.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
この Dockerfile はイメージを定義するものです。アプリケーションを含むコンテナを構築する時、そこには Python だけでなく、Python と依存関係のある全てが含まれます。Dockerfile の書き方は、Docker user guide と Dockerfile reference をお読みください。
次に、Python の依存関係を requirements.txt
というファイルに定義します。
Django
psycopg2
最後に docker-compose.yml
というファイルに、これら全てを結び付けます。アプリケーション構成するサービス(ここでは、ウェブサーバとデータベースです)を定義します。構成とは、使用する Docker イメージと、コンテナ内のどのボリュームをマウントしてリンクするかや、どのポートを公開するか記述します。
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
このファイルの動作についての詳細は、docker-compose.yml
リファレンス をご覧ください。
プロジェクトのビルド
これで Django プロジェクトを docker-compose run
で開始できます。
$ docker-compose run web django-admin.py startproject composeexample .
まずはじめに、Compose は Dockerfile
を使って web
サービスのイメージを構築します。それからコンテナ内で django-admin.py startproject composeexample .
を実行するためにイメージを使います。
これで現在のディレクトリの中に Django アプリケーションが作成されます。
データベースへの接続
データベースの接続をセットアップする必要があります。composeexample/settings.py
の中の DATABASES = ...
定義を読みます:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
これらの設定は、Dockerfile で postgres Docker イメージの指定によって決められています。
それから、docker-compose up
を実行します。
Recreating myapp_db_1...
Recreating myapp_web_1...
Attaching to myapp_db_1, myapp_web_1
myapp_db_1 |
myapp_db_1 | PostgreSQL stand-alone backend 9.1.11
myapp_db_1 | 2014-01-27 12:17:03 UTC LOG: database system is ready to accept connections
myapp_db_1 | 2014-01-27 12:17:03 UTC LOG: autovacuum launcher started
myapp_web_1 | Validating models...
myapp_web_1 |
myapp_web_1 | 0 errors found
myapp_web_1 | January 27, 2014 - 12:12:40
myapp_web_1 | Django version 1.6.1, using settings 'composeexample.settings'
myapp_web_1 | Starting development server at http://0.0.0.0:8000/
myapp_web_1 | Quit the server with CONTROL-C.
これで Docker デーモンのポート 8080 で Django アプリケーションが動作します( Boot2docker を使っている場合は、boot2docker ip
で IP アドレスが分かります)。
ほかにも Docker の管理コマンドを実行することもできます。データベースをセットアップするには、例えば、docker-compose up
を別のターミナルで実行します:
$ docker-compose run web python manage.py syncdb