Docker Compose network配置
这里是对docker compose 网络配置的一些说明,详细的文档参考:
https://docs.docker.com/compose/networking/
1 default network
如果不显式指定,Compose会为每一个app设置一个default网络。每个service的container会加入这个default网络并且能够被这个网络上的其他container访问到,hostname就是container的name,通过这个hostname可以发现container。
注意:
App的default网络的名字基于yaml文件所在的目录名字命名。可以修改此name使用--project-name flag或者COMPOSE_PROJECT_NAME 环境变量。
例子:
假设yaml文件所在的目录名为myapp,内容为:
version: "3.9"
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
ports:
- "8001:5432"
当运行docker-compose up命令时,会做一下事情:
- 创建一个名为myapp_default 的network
- 创建一个container使用web的配置参数,它加入myapp_default network并且hostname为web
- 创建一个container使用db的配置参数,它加入myapp_default network并且hostname为db
每一个container可以使用hostname web和db访问者两个容器。例如,web中的application可以使用url postgres://db:5432 访问postgre 数据库。
2区分HOST_PORT
和CONTAINER_PORT
上面的例子中,
db
的
HOST_PORT
是
8001
,
CONTAINER_PORT
是
5432.
同一个
network
的
service
之间使用
CONTAINER_PORT
进行通信,
如果有
HOST_PORT,
那么
docker
之外可以使用
HOST_PORT
访问服务。
例如,web container内的进程可以使用postgres://db:5432
访问
db
服务。
宿主机上的程序可以使用
postgres://{DOCKER_IP}:8001
访问db服务。
3更新容器
如果更新了一个docker service的配置,然后运行docker-compose up 更新它, 那么老的container会被删除,新的container会使用一个不同ip加入network但是host name相同。正在运行的container可以通过名字查找并连接到新的ip,老的ip不再工作了。
如果有container仍然存在到老container的连接,这些连接会被关闭。 Container负责检测这种状况并重新连接到新container。
4自定义network
除了使用default 网络,也可以使用networks关键字自定义自己的网络。这样可以创建更复杂的拓扑结构,也可以连接到外部的网络。例如下面的例子,service proxy和db是相互隔离的,因为他们分别加入不同的网络,app可以与他们两个都建立通信。
version: "3"
services:
proxy:
build: ./proxy
networks:
- frontend
app:
build: ./app
networks:
- frontend
- backend
db:
image: postgres
networks:
- backend
networks:
frontend:
external: true
driver: custom-driver-1
name: frontend
backend:
driver: custom-driver-2
name: backend
5 docker network常用命令
docker network命令是network相关的操作
主要的命令有:
$ docker network --help
Usage: docker network COMMAND
Manage networks
Commands:
connect 连接一个container到一个network
create 创建一个network
disconnect 从一个network断开container
inspect 显示network的详细信息
ls 列出所有的network
prune 删除不用的networks
rm 删除一个或多个network
更多推荐
所有评论(0)