Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした