====== 27 Docker Djnago ======
Docker でJango環境を作ってみる。
pipでのインストールは、[[15_python:01_django:01_install]] です。
===== 1 ファイル用意 =====
FROM python:3.11
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip3 install -r requirements.txt
ADD . /code/
EXPOSE 8000
Django>=4.2
mysqlclient==1.4.6
djangorestframework==3.14.0
django-cors-headers==4.3.1
version: '3'
services:
django:
container_name: "django"
build: .
command: python3 manage.py runserver 0.0.0.0:8000
working_dir: /code
ports:
- 8000:8000
volumes:
- .:/code
depends_on:
- db
environment:
- CHOKIDAR_USEPOLLING=true
db:
container_name: "db"
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: "db"
MYSQL_ROOT_PASSWORD: 'password'
volumes:
- ./mysql:/var/lib/mysql
ports:
- 3306:3306
※CHOKIDAR_USEPOLLING=Trueを入れておくと、編集するとホットリロードしてくれる。
==== Let's Encryptリバースプロキシを利用する場合のdocker-compose.yml ====
[[06_virtualization:05_container:25_let_s_encrypt_proxy]]で、SSL化して利用する場合
version: '3'
services:
django:
container_name: "django"
build: .
command: python3 manage.py runserver 0.0.0.0:8000
working_dir: /code
#ports:
# - 8000:8000
volumes:
- .:/code
depends_on:
- db
environment:
- CHOKIDAR_USEPOLLING=true
- VIRTUAL_HOST=django.fl8.jp
- LETSENCRYPT_HOST=django.fl8.jp
networks:
- app_proxy-tier
- default
db:
container_name: "db"
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: "db"
MYSQL_ROOT_PASSWORD: 'password'
volumes:
- ./mysql:/var/lib/mysql
ports:
- 3306:3306
networks:
app_proxy-tier:
external: true
===== 2 build =====
docker-compose build
===== 3 Jangoプロジェクト作成 =====
※[プロジェクト名]の後ろのドットが重要
docker-compose run django django-admin startproject [プロジェクト名] .
例:
docker-compose run django django-admin startproject testproject .
==== プロジェクト作成後 ====
[プロジェクト名]/settings.pyに下記を追加
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'db',
'POST': 3306,
'OPTIONS': {
'charset': 'utf8mb4'
}
}
}
===== 4 起動 =====
docker-compose up -d
==== ALLOWED_HOSTS追加 ====
この画面が出るので、ALLOWED_HOSTSにホスト名を追加
{{:06_virtualization:05_container:pasted:20231214-125010.png}}
ALLOWED_HOSTS = ['django.fl8.jp']
or
ALLOWED_HOSTS = ['{IP}']
===== 5 確認 =====
ブラウザで http://[IP]:8000 をアクセス
{{:06_virtualization:05_container:pasted:20230602-222642.png}}
===== 6 自動起動 =====
再起動後の自動起動は、/etc/rc.localを使うのが良いかも
[[06_virtualization:05_container:26_docker_iptables|Docker iptablesの話]]
#!/bin/sh
sleep 5
iptables -I DOCKER-USER -p tcp --dport 3306 -d 0.0.0.0/0 -d 172.23.0.2 -j DROP
iptables -I DOCKER-USER -p tcp --dport 3306 -s 172.23.0.3 -d 172.23.0.2 -j ACCEPT
iptables -I DOCKER-USER -p tcp --dport 3306 -s 192.168.10.10 -d 172.23.0.2 -j ACCEPT
docker start django
{{tag>docker django python}}