Edited at

Djangoの環境をDocker化する(Docker + Django + Gunicorn + nginx)その2

More than 1 year has passed since last update.

前回は、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"



  1. 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/appDjangoアプリケーションディレクトリを指定します。


    • ./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番ポートをフォワードするように指示します。



嵌りポイント


  1. 静的ファイルのディレクトリを明示的にボリュームとして宣言しないと静的ファイルを配信できない。


次回は、Djangoフレームワークの初期設定を記載します。