5.1 配置网络
我们再来仔细看看如何为我们的多容器应用程序配置网络和卷。这将确保服务之间的正确交互和数据的长期存储。
Docker网络允许容器彼此通信。在我们的应用程序中,我们将使用 bridge 网络来连接前端、后端和数据库。
创建网络
我们已经在 docker-compose.yml 文件中定义了网络 task-network:
Yaml
networks:
task-network:
driver: bridge
其中:
- task-network: 网络的名称,将用于容器之间的交互。
- driver:
bridge: 网络类型。bridge网络是单主机容器连接的默认类型。
将服务连接到网络
我们已经在 docker-compose.yml 文件中将所有服务连接到了该网络。确保每个服务都已正确连接:
前端示例:
Yaml
frontend:
build: ./frontend
ports:
- "3000:3000"
networks:
- task-network
后端示例:
Yaml
backend:
build: ./backend
ports:
- "5000:5000"
depends_on:
- database
networks:
- task-network
environment:
- DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
数据库示例:
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
5.2 配置卷
Docker卷允许将容器数据保存到主机系统上,保证数据的持久化存储。在我们的应用中,我们会使用一个卷来存储PostgreSQL数据库的数据。
创建卷
我们已经在文件 compose.yaml 中定义了一个卷 db-data:
Yaml
volumes:
db-data:
这里:
-
db-data: 是将用于存储PostgreSQL数据库数据的卷的名称。
将卷连接到数据库服务
我们已经在文件 docker-compose.yml 中将卷 db-data 连接到数据库服务。确保这是正确的:
数据库示例:
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
这里:
-
volumes: 定义了哪些卷将连接到容器。 -
db-data:/var/lib/postgresql/data: 将卷db-data和容器内部的目录/var/lib/postgresql/data关联起来。这个目录是PostgreSQL用来存储数据的。
5.3 完整文件 compose.yaml
为了更清晰和完整,我们提供了包含网络和卷配置的完整 compose.yaml 文件:
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:
检查网络和卷配置
在完成网络和卷配置后,确保所有内容正确设置并正常工作:
- 1. 启动容器:
Terminal
docker compose up - 2. 检查网络:
- 使用命令
docker network ls,确认task-network网络已创建。 - 使用命令
docker network inspect task-network,检查所有容器是否已连接到该网络。
- 使用命令
- 3. 检查卷:
- 使用命令
docker volume ls,确认db-data卷已创建。 - 使用命令
docker volume inspect db-data,查看卷的详细信息。
- 使用命令
GO TO FULL VERSION