我创建了一个Django+React+PostgreSQL环境的Docker实例,这是我的备忘录
導言
- Windows11+WSL2環境での記事となります。
以下是本次构建的原因。
-
- 自分でDockerfileやdocker-compose.ymlを作ったことがなかったのでDockerへの理解を深めるため
- Django+Reactのモダンな環境を触ってみたかった
由于我只是简单地阅读了下面的文章,所以对Docker的理解仅限于此,可能会有改进之处。
目录结构
请按照以下方式进行配置,这是将要创建文件的目录。
root/
├── backend/
│ └── dockerfile(django用)
└── frontend/
│ └── dockerfile(react用)
└── docker-compose.yml
创建Dockerfile(Django)
Dockerfile是一个用于根据DockerHub上已存在的映像文件创建个人喜欢的环境的配置文件。
这次我们正在使用DockerHub上的Python镜像来安装Django和psycopg2-binary(用于从Python连接到PostgreSQL的库)。
FROM python:3.8
RUN pip install --upgrade pip && pip install Django==4.2.2 psycopg2-binary
WORKDIR /usr/backend
CMD ["bash"]
每个命令的说明如下所示。
创建 Dockerfile(React)
FROM node:16.20.0-alpine3.18
WORKDIR /usr/frontend
RUN npm install -g create-react-app@5.0.1
CMD ["sh"]
创建docker-compose.yml文件
version: '3.8'
services:
backend:
build: ./backend
command: python /usr/backend/manage.py runserver 0.0.0.0:8000
volumes:
- ./backend:/usr/backend
ports:
- 8000:8000
depends_on:
- db
db:
image: postgres
ports:
- 5432:5432
environment:
- POSTGRES_DB=dbname
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data/
frontend:
build: ./frontend
working_dir: /usr/frontend/appname
tty: true
environment:
- NODE_ENV=development
volumes:
- ./frontend:/usr/frontend
ports:
- "3000:3000"
volumes:
postgres_data:
在 docker-compose.yml 中进行容器启动时的配置(类似于使用命令执行时的选项)。
由于内容较长,省略了各项的具体内容,但指定了应用程序的端口、与主机的文件同步目录等。
请根据在执行React项目创建时指定的项目名称来调整下面的appname部分。
working_dir: /usr/frontend/appname
准备Docker镜像。
在docker-compose中设置了启动服务器的命令,但由于尚未创建项目,我们将先分别在每个镜像中启动容器以先创建React和Django项目。
在包含docker-compose.yml文件的目录中执行以下命令。
docker-compose build
处理完成后
docker image ls

创建Django项目
启动后端图像。
docker container run -it --rm [backendのIMAGE ID] bash
请确认你正在 [/usr/backend] 目录中,并输入以下命令(appname 部分请根据需要进行设置)。
django-admin startproject appname .

docker ps

docker cp [コンテナID]:usr/backend [root]
当复制操作完成后,请关闭执行docker container run命令的控制台。
符号链接..\目录\ 要求的权限不由客户端持有。
使用React创建项目
请注意,末尾的命令是使用sh而不是bash,与后端一样,单独启动容器。
docker run -it --rm [frontendのimage id] sh
请确认您当前位于 usr/frontend 目录下,然后执行以下指令
npx create-react-app appname --template typescript
当执行完成后,请打开新的控制台,并执行以下命令以将文件复制到主机 PC 上。
※容器ID是当前正在运行的前端容器的ID,root是项目的根目录(指docker-compose.yml所在的目录)。
docker cp [コンテナID]:usr/frontend [root]
请在完成复制后,关闭控制台,或使用[exit]命令退出容器。(由于设置了–rm选项,容器将终止。)
执行docker-compose up
在项目的根目录(即包含docker-compose.yml文件的目录)上执行以下命令。
docker-compose up -d

作者简介
由于之前只能通过Laravel-sail或者其他人给的Dockerfile来使用Docker环境,所以这真的是一次很好的学习机会。
其实我本来想在Dockerfile上生成项目,但是发现在docker-compose up时,主机PC上的目录结构会优先同步,所以无法顺利进行。这让我有些遗憾。
如果有兴趣的话,我也可以写一下React和Django的协作方法。