Docker Compose的网络设置
Docker Compose的网络相关内容的介绍。
原文地址:https://docs.docker.com/compose/networking/
以下介绍Compose网络特性仅适用于Compose-file2格式,在version1不支持。
如不指定项目名称,Docker-Compose默认以当前文件目录名作为应用的项目名(ProjectName)
。
Docker-Conpose为你的应用创建一个网络,Docker-Compose为每个Service创建一个容器,并加入到这个网络中,被网络中的其它容器访问和发现。此容器能够以容器名称作为hostname标识,被其它容器访问。
注:Docker-compose命令中通过
--project-name
或-p
参数来指定项目名称,也可以指定环境变量COMPOSE_PROJECT_NAME
示例说明docker-compose创建资源
docker-compose.yml
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
db:
image: postgres
在myapp
目录使用命令docker-compose up
,将执行以下几步:
+ 创建一个名为myapp_default
的网络
+ 以服务名(web、db)分别创建两个容器,添加到myapp_default
网络中
+ 容器以服务名(web、db)作为其hostname相互访问,如web可以postgres://db:5432
访问db容器
由于Service与容器对应,以下将Docker-Compose创建的容器简称为Service。
更新容器
使用docker-compose up
将停止并移除旧容器,重建新容器。
任何连接到旧容器的(其它容器的)连接将关闭,然后检测条件,根据容器名称查找并重建连接。
Links
默认情况下,Docker-Compose下的Servcie之间是可通过服务名称(容器名称,也即hostname)相互访问的。
links只不过为Service提供了以别名访问其它Service的一种方式。
跨主机网络
当把Compose部分到Swarm集群时,可利用Swarm内置的overlay
驱动实现不同主机间容器访问,
无需改变Compose文件或应用程序代码。
如何将Comnpose应用到Swarm集群?
networks关键字指定自定义网络
compose file中顶级networks关键字,可以用来创建更加复杂的网络拓扑,指定自定义网络驱动和选项,
也可以用它来连接外部创建(非Compose创建)的网络。
每个Service可通过service内部的networks关键字来指定它要使用的顶级网络。
给Service指定networks的好处是,实现网络隔离或连接
version: '2'
services:
proxy:
build: ./proxy
networks:
- front
app:
build: ./app
networks:
- front
- back
db:
image: postgres
networks:
- back
networks:
front:
# Use a custom driver
driver: custom-driver-1
back:
# Use a custom driver which takes special options
driver: custom-driver-2
driver_opts:
foo: "1"
bar: "2"
Networks can be c
配置默认网络
version: '2'
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
更多推荐
所有评论(0)