LoginSignup
24
24

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-17

前回は、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フレームワークの初期設定を記載します。

24
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
24