4.1 初始化
在这一步,我们会配置 compose.yaml 文件来启动我们多容器应用程序的所有服务。compose.yaml 文件会包括前端、后端和数据库的配置,还会定义网络和卷。
定义 Docker Compose 的版本
我们从指定 Docker Compose 的版本开始。在这个例子中使用的是版本 3:
Yaml
version: '3'
4.2 定义服务
服务 1: Frontend (ReactJS)
定义一个前端服务,它将从 frontend 目录中构建,并在端口 3000 上可用:
Yaml
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
服务 2: Backend (Flask)
定义一个后端服务,它将从 backend 目录中构建。它依赖于数据库服务,并将在端口 5000 上可用:
Yaml
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
其中:
- depends_on: 表示 backend 服务依赖于 database 服务。这意味着数据库将在后端启动之前启动。
- environment: 配置环境变量以连接到数据库。
服务 3: Database (PostgreSQL)
定义数据库服务,使用官方 postgres:13 镜像。配置环境变量以创建数据库和用户凭据:
Yaml
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
其中:
-
environment: 配置环境变量以在启动容器时创建数据库和用户。 -
volumes: 连接 db-data 卷以持久存储数据。
4.3 配置网络和卷
定义我们服务要用到的网络和卷:
Yaml
networks:
task-network:
driver: bridge
volumes:
db-data:
其中:
- networks: 定义了一个名为
task-network的网络,使用bridge类型的驱动,它将用于容器之间的通信。 - volumes: 定义了一个名为
db-data的卷,用于存储数据库数据。
4.4 完整的 docker-compose.yml 文件
现在,我们将所有部分整合到一个文件 docker-compose.yml 中:
Yaml
version: '3'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
database:
image: postgres:13
environment:
- POSTGRES_DB=taskdb
- POSTGRES_USER=taskuser
- POSTGRES_PASSWORD=taskpassword
networks:
- task-network
volumes:
- db-data:/var/lib/postgresql/data
networks:
task-network:
driver: bridge
volumes:
db-data:
配置说明
-
build: 指定Dockerfile所在的目录路径,用于构建镜像。 -
ports: 打开主机上的端口以访问服务。 -
depends_on: 指定服务依赖于其他服务,以确保启动顺序。 -
environment: 配置服务的环境变量。 -
networks: 定义用于容器之间通信的网络。 -
volumes: 定义用于持久存储数据的卷。
4.5 启动应用程序
现在,compose.yaml 文件已经配置好,咱们可以用一个命令启动所有服务了:
Terminal
docker compose up
这个命令会根据 compose.yaml 里的配置创建并启动前端、后端和数据库的容器。
检查启动状态
容器启动后,确保所有服务正常运行:
- Frontend: 打开浏览器,访问 http://localhost:3000,检查前端是否正常工作。
- Backend: 打开浏览器,访问 http://localhost:5000,检查后端是否正常工作。
- Database: 确保数据库容器已经启动,并且能通过网络与后端进行交互。
GO TO FULL VERSION