默认docker compose仅仅会为你的app生成一个network, 所有依赖的服务都会加入这个网络中, 在docker-compose文件中定义的Projectname就是每一个镜像的hostname;
# 例子
# For example, suppose your app is in a directory called myapp,
# and your docker-compose.yml looks like this
version: "3"
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
ports:
- "8001:5432"
# 说明: A network called myapp_default is created.
我们可以使用 postgres://db:5432 方式链接postgres数据库
现实情况中的场景往往更复杂,一个network很难满足更复杂的需求; 比如说, 不同的Project在不同的网络中;
# 例子:
version: "3"
services:
proxy:
build: ./proxy
networks:
- frontend
app:
build: ./app
networks:
- frontend
- backend
db:
image: postgres
networks:
- backend
networks:
frontend:
# Use a custom driver
driver: custom-driver-1
backend:
# Use a custom driver which takes special options
driver: custom-driver-2
driver_opts:
foo: "1"
bar: "2"
# 说明
app可以和proxy和db互通, 但是proxy和db之间不能互通;
version: "3"
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
networks:
default:
# Use a custom driver
driver: custom-driver-1
networks:
default:
external:
name: my-pre-existing-network
# 一个实际应用场景
# 在项目重构迁移阶段, 老系统的测试环境old_test_docker_compose.yml, 新系统的测试环境new_test_docker_compose.yml, 老系统有部分服务需要调用新系统的
# 1. 第一步: 创建一个网络
docker network create share
# 2. 第二步: 在新老系统都添加这个网络为默认网络
networks:
default:
external:
name: share