Webサーバコンテナの作成
ここからは本番環境を想定し、WebサーバとしてNginxのコンテナを追加します。
ディレクトリとファイルを作成します。
mkdir -p docker/web/conf.d
touch docker/web/conf.d/default.conf
touch docker/.env.prod
touch docker-compose.prod.yml
1upstream django {
2 server app:8000;
3}
4
5server {
6 listen 80;
7 server_name 0.0.0.0;
8 location / {
9 proxy_pass http://django;
10 proxy_set_header Host $host;
11 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
12 proxy_redirect off;
13 }
14}
1TZ='Asia/Tokyo'
2MYSQL_DATABASE=mysite
3MYSQL_USER=django
4MYSQL_ROOT_PASSWORD=root
5MYSQL_PASSWORD=django
6SECRET_KEY=django
7DEBUG=False
1version: '3.9'
2services:
3 app:
4 container_name: django
5 build:
6 dockerfile: ./docker/app/Dockerfile
7 env_file: ./docker/.env.prod
8 command: poetry run gunicorn mysite.wsgi:application --bind 0.0.0.0:8000
9 depends_on:
10 db:
11 condition: service_healthy
12 db:
13 container_name: mysql
14 image: mysql:8
15 volumes:
16 - ./docker/db/data:/var/lib/mysql
17 - ./docker/db/conf.d:/etc/mysql/conf.d
18 env_file: ./docker/.env.prod
19 ports:
20 - "3306:3306"
21 privileged: true
22 healthcheck:
23 test: mysqladmin ping -h 127.0.0.1 -u$$MYSQL_USER -p$$MYSQL_PASSWORD
24 interval: 10s
25 timeout: 10s
26 retries: 3
27 start_period: 30s
28 web:
29 container_name: nginx
30 image: nginx
31 volumes:
32 - ./docker/web/conf.d:/etc/nginx/conf.d
33 ports:
34 - 80:80
35 depends_on:
36 - app
コンテナを起動します。
docker compose -f docker-compose.prod.yml up -d
コンテナが起動していることを確認します。
docker compose -f docker-compose.prod.yml ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
django django-docker-sample-app "poetry run gunicorn…" app 32 minutes ago Up 32 minutes 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp
mysql mysql:8 "docker-entrypoint.s…" db 32 minutes ago Up 32 minutes (healthy) 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
nginx nginx "/docker-entrypoint.…" web 32 minutes ago Up 32 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp
ログにエラーがないことを確認します。
docker compose -f docker-compose.prod.yml logs
マイグレーションファイルを生成します。
docker compose -f docker-compose.prod.yml exec app poetry run python manage.py makemigrations
マイグレーションを実行します。
docker compose -f docker-compose.prod.yml exec app poetry run python manage.py migrate
http://localhost/polls/ にアクセスできることを確認します。
コンテナを終了します。
docker compose -f docker-compose.prod.yml down