使用Compose变量定制Docker网络

使用[Docker 多节点网络]来创建虚拟网络,把容器接入虚拟网络,能实现应用中所需要的网络拓扑。具体来说,Bridge网络能用来创建单节点网络,Overlay网络能创建多节点网络。通过这样给应用定制专用网络,能为容器提供绝对的隔离性。

Docker Compose的目标是实现单节点网络,通过用--x-networking 来创建一个应用程序独有的桥接网络,如果应用程序需要多节点部署,可以使用Docker Swarm集群来创建一个overlay网络。

那如果一个桥接网络或overlay网络已经存在,而你想要把这个网络分配给运行中的容器呢?

Docker 1.9 引入了变量替换的特性,我们可以利用这特性实现把容器关联到一个预创建的网络上。

创建Docker桥接网络

1. 创建网络:

sh

docker network create -d bridge mynet

47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b=

2. 列出网络:

sh

docker network ls

NETWORK ID          NAME                DRIVER

feb6e9567439        bridge              bridge 

29563a59abe8        none                null 

25ab737cd665        host                host 

47d6225ffe56        mynet               bridge

Docker会为每个节点自动创建三个网络:

| 网络名称 | 作用  |

| :-------- | :-- |

| bridge |  容器默认连接的网络,是所有Docker安装时都默认安装的docker0网络   |

| none     |   容器定制的网络栈 |

| host     |   在宿主网络栈上添加一个容器,容器中的网络配置会与宿主的一样|

上边看到,我刚创建的mynet网络也在列表中。

使用docker inspect命令查看mynet网络的详细信息:

json

[

{

"Name": "mynet",

"Id": "47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b",

"Scope": "local",

"Driver": "bridge",

"IPAM": {

"Driver": "default",

"Config": [

{}

]

},

"Containers": {},

"Options": {}

}

]

从Containers这节可以看到,目前还没有容器关联上去。

Docker Compose 与 网络

1. 上面新建的网络能在新的容器中使用,只要在运行时使用docker run --net=命令。不过本文会用Compose文件实现:

json

mycouchbase:

container_name: "db"

image: couchbase/server

ports:

- 8091:8091

- 8092:8092 

- 8093:8093 

- 11210:11210

net: ${NETWORK}

mywildfly:

image: arungupta/wildfly-admin

environment:

- COUCHBASE_URI=db

ports:

- 8080:8080

- 9990:9990

net: ${NETWORK}

注意这里net已经指定使用一个自定义网络。

2. 使用新创建的网络来启动应用:

sh

NETWORK=mynet docker-compose up -d

再查看网络详细信息:

json

docker network inspect mynet

[

{

"Name": "mynet", 

"Id": "47d6225ffe56ddd1a8bc0d6abb0ffd8f8ac3eec2090ff243f8cd6f77c170751b", 

"Scope": "local", 

"Driver": "bridge", 

"IPAM": { 

"Driver": "default", 

"Config": [ 

{} 

}, 

"Containers": { 

"300bebe6c3e0350ebf9b9d3746eb3a7b49444e14c00314770627a9f101442639": { 

"EndpointID": "82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f", 

"MacAddress": "02:42:ac:14:00:03", 

"IPv4Address": "172.20.0.3/16", 

"IPv6Address": "" 

}, 

"4fdae4eb919f0934422513227fe541255557dd9e8b3317374685927e7f427249": { 

"EndpointID": "937605d716d144b55288d70817d611da5fb0f87e3aedd6b5074fca07f82c3953", 

"MacAddress": "02:42:ac:14:00:02", 

"IPv4Address": "172.20.0.2/16", 

"IPv6Address": "" 

}, 

"Options": {} 

]

可以看到现在已经有两个容器关联到这个网络上了。

使用docker ps查看容器ID:

sh 

# docker ps 

CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                                                                               NAMES

300bebe6c3e0        couchbase/server          "/entrypoint.sh couch"   2 minutes ago       Up 2 minutes        0.0.0.0:8091-8093->8091-8093/tcp, 11207/tcp, 11211/tcp, 0.0.0.0:11210->11210/tcp, 18091-18092/tcp   db

4fdae4eb919f        arungupta/wildfly-admin   "/opt/jboss/wildfly/b"   2 minutes ago       Up 2 minutes        0.0.0.0:8080->8080/tcp, 0.0.0.0:9990->9990/tcp                                                      wildflycouchbasejavaee7network_mywildfly_1

查看其中一个容器的网络设置: 

sh 

docker inspect -f '{{ .HostConfig.NetworkMode }}' 300 

mynet

查看这个容器的详细网络信息:

sh 

docker inspect -f '{{ .NetworkSettings.Networks.mynet }}' 300 

{82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f 172.20.0.1 172.20.0.3 16   0          02:42:ac:14:00:03}

这个容器的更多细节能用docker inspect看到,相关的部分在这里:

json

"Networks": {

"mynet": {

"EndpointID": "82a3e2d7cd4f1bb03c9ef52bb6abf284942d7e9fcac89fe3700b0e0c4ed2654f",

"Gateway": "172.20.0.1",

"IPAddress": "172.20.0.3",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:14:00:03"

}

}

创建新的Docker Overlay网络

创建Overlay网络需要预先搭建好一个键值对服务和一个Docker Swarm集群。

如了解更多docker相关知识,请观看培训视频:https://csphere.cn/training

如需要docker相关产品,请访问希云官网首页:https://csphere.cn

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容