クイックスタート・ガイド:Compose と Django¶
このクイックスタート・ガイドは、Compose を使い、簡単な Django/PostgreSQL アプリのセットアップと実行をします。始める前に、 Compose のインストール が必要です。
プロジェクトの構成物を定義¶
..For this project, you need to create a Dockerfile, a Python dependencies file, and a docker-compose.yml file.
このプロジェクトでは、Dockerfile と、Python 依存関係のファイル、docker-compose.yml
ファイルを作成する必要があります。
- プロジェクト用の空のディレクトリを作成。
覚えやすい名前のディレクトリを作成します。このディレクトリがアプリケーション・イメージの内容となるものです。ディレクトリには、イメージ構築に関するリソースのみ置きます。
- プロジェクト用のディレクトリに、
Dockerfile
という名称の新規ファイルを作成します。
Dockerfile はアプリケーションのイメージ内容に含まれる、1つまたは複数のイメージ構築用のコマンドを定義します。構築(ビルド)時に、コンテナの中でイメージを実行できます。Dockerfile
の詳細情報については、 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 2.7 ベース・イメージを使って開始します。ベース・イメージに新しく /code
ディレクトリ追加という変更が行われます。ベース・イメージは、requirements.txt
ファイルで定義されている Python 依存関係のインストールという、更なる変更を定義するものです。
Dockerfile
を保存して閉じます。
requirements.txt
をプロジェクト用のディレクトリに作成します。
このファイルは Dockerfile
の RUN pip install -r requirements.txt
命令で使います。
- ファイル中に必要なソフトウェアを記述します。
Django
psycopg2
requirements.txt
ファイルを保存して閉じます。
- プロジェクト用のディレクトリに
docker-compose.yml
という名称のファイルを作成します。
docker-compose.yml
ファイルは、アプリケーションを作るためのサービスを記述します。この例におけるサービスとはウェブサーバとデータベースです。また、Compose ファイルではサービスが利用する Docker イメージ、どのように相互にリンク吸うか、コンテナ内で必要となるボリュームをそれぞれ定義します。最後に docker-compose.yml
ファイルでサービスを公開するポートを指定します。詳細な情報や動作に関しては docker-compose.yml リファレンス をご覧ください。
- ファイルに以下の設定を追加します。
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
このファイルは2つのサービスを定義しています。db
サービスと web
サービスです。
docker-compose.yml
ファイルを保存して閉じます。
Django プロジェクトの作成¶
このステップでは、Django を開始するプロジェクトを作りましょう。そのためには、先の手順で構築内容を定義したイメージを作成します。
- プロジェクト用のディレクトリに移動します。
- Django プロジェクトを
docker-compose
コマンを使って作成します。
$ docker-compose run web django-admin.py startproject composeexample .
これは Compose に対して、コンテナ内で django-admin.py startproject composeexample
を実行するよう命令します。コンテナは web
サービスのイメージと設定を使います。web
イメージはまだ作成していませんが、docker-compose.yml
の build: .
行の命令があるため、現在のディレクトリ上で構築します。
web
サービスのイメージが構築されると、Compose はこのイメージを使い、コンテナの中で django-admin.py startproject
を実行します。このコマンドは Django プロジェクトの代表として、Django に対してファイルとディレクトリの作成を命令します。
docker-compose
コマンドが完了すると、プロジェクトの内容は次のようになります。
$ ls -l
drwxr-xr-x 2 root root composeexample
-rw-rw-r-- 1 user user docker-compose.yml
-rw-rw-r-- 1 user user Dockerfile
-rwxr-xr-x 1 root root manage.py
-rw-rw-r-- 1 user user requirements.txt
ファイル django-admin
は所有者が root として作成されました。これはコンテナが root
ユーザによって実行されたからです。
- 新しいファイルの所有者を変更します。
sudo chown -R $USER:$USER .
データベースに接続¶
このセクションでは、Django 向けのセータベースをセットアップします。
- プロジェクト用ディレクトリで、
composeexample/settings.py
ファイルを編集します。
DATABASES = ...
を以下のものに置き換えます。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
これらの設定は docker-compose.yml
で指定した postgres Docker イメージによって決められているものです。
- ファイルを保存して閉じます。
docker-compose up
コマンドを実行します。
$ docker-compose up
Starting composepractice_db_1...
Starting composepractice_web_1...
Attaching to composepractice_db_1, composepractice_web_1
...
db_1 | PostgreSQL init process complete; ready for start up.
...
db_1 | LOG: database system is ready to accept connections
db_1 | LOG: autovacuum launcher started
..
web_1 | Django version 1.8.4, using settings 'composeexample.settings'
web_1 | Starting development server at http://0.0.0.0:8000/
web_1 | Quit the server with CONTROL-C.
これで Django アプリが Docker ホスト上のポート 8000
で動作しているでしょう。Docker Machine の仮想マシンを使っている場合は、docker-machine ip マシン名
を実行して IP アドレスを取得できます。