在Docker上搭建Django环境
目标
使用Docker构建Django环境。
使用Docker容器作为连接的数据库(PostgreSQL)。
准备Django的环境
作为步骤来说,以下是一种选择:
-
- 创建Dockerfile和docker-compose.yml文件
-
- 创建镜像
-
- 从镜像中提取Django项目文件夹
- 迁移
从图像中提取项目文件夹的原因是因为如果在没有项目文件夹的情况下执行 docker-compose up -d,会导致项目文件夹为空的状态。
创建Dockerfile和docker-compose.yml文件
创建数据库目录,并设定以下的目录结构。
.
├── Dockerfile
├── database # 空ディレクトリ
└── docker-compose.yml
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN python -m pip install --upgrade pip \
# PostgreSQL 以外を使用する場合は psycopg2 ではなく、対応するデータベースバインディングに変更
&& pip install Django psycopg2 \
&& pip cache purge \
&& django-admin startproject sample \
# DB の設定を修正
&& sed -i sample/sample/settings.py \
-e "s/'ENGINE': 'django.db.backends.sqlite3',/'ENGINE': 'django.db.backends.postgresql',/" \
-e "s/'NAME': BASE_DIR \/ 'db.sqlite3',/'NAME': 'mydb',/" \
-e "/'NAME': 'mydb',/a<SPACE>'USER': 'user'," \
&& sed -i sample/sample/settings.py \
-e "/'USER': 'user',/a<SPACE>'PASSWORD': 'pass'," \
&& sed -i sample/sample/settings.py \
-e "/'PASSWORD': 'pass',/a<SPACE>'HOST': 'postgres'," \
&& sed -i sample/sample/settings.py \
-e "s/<SPACE>/ /"
version: "3"
services:
wait:
image: dadarek/wait-for-dependencies
container_name: "wait"
depends_on:
- postgres
postgres:
image: postgres:10
container_name: "postgres"
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
ports:
- "15432:5432"
volumes:
- ./database:/var/lib/postgresql/data
networks:
- db-net
django:
build: .
image: "django"
container_name: "django"
working_dir: /sample
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./sample:/sample
ports:
- "8000:8000"
networks:
- db-net
depends_on:
- postgres
- wait
volumes:
database:
driver: local
networks:
db-net:
driver: bridge
2. 创造形象
运行 docker-compose build
从图像中提取Django项目文件夹。
生成的镜像包含了执行 django-admin startproject sample 后的项目文件夹。
由于不能直接从镜像中获取文件,因此需要先生成一个容器,然后再将其获取到主机上。
> CONTAINER_ID=`docker create django`
> docker cp $CONTAINER_ID:/sample/ .
> docker rm $CONTAINER_ID
4. 迁移
先启动容器,执行迁移操作并重新启动。
> docker-compose up -d
> docker-compose run django python manage.py migrate
> docker-compose restart
如果能连接到 localhost:8000,则显示为“OK”。
结束 (Jie shu)
如果设置如上,可以在sample文件夹下进行开发,并通过docker-compose up -d命令启动和确认服务器运行情况。
对于测试等各种命令的执行,只需使用docker-compose exec django [执行命令]即可。
docker-compose exec django python manage.py test sample