前回は、nginx.conf
までを記載しました。今回は、docker-compose.yml
を中心に嵌りどころも含めて書いていきたいと思います。
下記で公開中です。記事と合わせて参考にしてください。
Dockerize Django Environment
docker-compose.ymlの初期設定
docker-compose.yml
version: '2'
services:
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
command: gunicorn app.wsgi -b 0.0.0.0:8000
volumes:
- ./web:/usr/src/app
- ./web/static/:/usr/src/app/static
nginx:
restart: always
image: nginx
ports:
- "80:80"
volumes:
- "./nginx/:/etc/nginx/"
- /www/static
volumes_from:
- web
links:
- web:web
postgres:
image: postgres
ports:
- "5432:5432"
-
Django
用コンテナの定義(サービス名:web)
- 前回のディレクトリ構造にて、
Django
用ディレクトリをweb
としました。その中ににあるDockerfile
をからビルドします。 -
EXPOSE
命令で、特定のネットワークポート(今回は、8000
)をコンテナ実行時に公開することをdocker
に伝えます。 -
LINKS
命令で、コンテナを他のサービスと連携します。(今回は、postgres
) -
command
命令で、コンテナ実行時に実行されるcommandを上書きします。(今回は、gunicorn app.wsgi -b 0.0.0.0:8000
)※gunicorn
については別途記載します。 -
volumes
命令で、指定したディレクトリがボリュームであることを宣言します。(ホスト:コンテナ)
の関係で指定しています。-
./web:/usr/src/app
でDjango
アプリケーションディレクトリを指定します。 -
./web/static/:/usr/src/appstatic
で静的ファイルディレクトリを指定します。
-
2.Nginx
用コンテナの定義(サービス名:nginx)
-
IMAGE
命令で、タグもしくはイメージIDを指定し、pullします。今回は、nginx
イメージをpullします。 -
PORTS
命令で、ホストの80番ポートとコンテナの80番ポートをフォワードするように指示します。 -
VOLUMES
命令で、ホストのnginx
ディレクトリ配下にあるnginx.conf
ファイルをコンテナの/etc/nignx
ディレクトリにコピーするように指示します。 -
VOLUMES
命令で、/www/static
ディレクトリを明示的にボリュームとして使用することを宣言します。(静的ファイルを格納しているディレクトリ) -
VOLUMES_FROM
命令で、Web
(Django用ディレクトリ)をマウントするように指示します。(静的ファイルを取り込むため)
3.PostgreSQL
用コンテナの定義(サービス名:postgres)
-
postgres
イメージをpullします。 -
PORTS
命令で、ホストの5432番ポートとコンテナの5432番ポートをフォワードするように指示します。
嵌りポイント
- 静的ファイルのディレクトリを明示的にボリュームとして宣言しないと静的ファイルを配信できない。
次回は、Django
フレームワークの初期設定を記載します。