Docker network命令详解

docker network命令

docker network所有子命令如下:

docker network create

docker network connect

docker network ls

docker network rm

docker network disconnect

docker network inspect

创建网络

在安装Docker Engine时会自动创建一个默认的bridge网络docker0。

此外,还可以创建自己的bridge网络或overlay网络。

bridge网络依附于运行Docker Engine的单台主机上,而overlay网络能够覆盖运行各自Docker Engine的多主机环境中。

创建bridge网络比较简单如下:

# 不指定网络驱动时默认创建的bridge网络

docker networkcreatesimple-network

# 查看网络内部信息

docker network inspect simple-network

# 应用到容器时,可进入容器内部使用ifconfig查看容器的网络详情


但是创建一个overlay网络就需要一些前提条件(具体操作请参考Docker容器网络相关内容):

key-value store(Engine支持Consul、Etcd和ZooKeeper等分布式存储的key-value store)

集群中所有主机已经连接到key-value store

swarm集群中每个主机都配置了下面的daemon参数

–cluster-store

–cluster-store-opt

–cluster-advertise

然后创建overlay网络:

# 创建网络时,使用参数`-d`指定驱动类型为overlay

docker network create-doverlay my-multihost-network

就使用--subnet选项创建子网而言,bridge网络只能指定一个子网,而overlay网络支持多个子网。

在bridge和overlay网络驱动下创建的网络可以指定不同的参数,具体请参考:https://docs.docker.com/engine/userguide/networking/work-with-networks/

连接容器

创建三个容器,分别前两个使用默认网络启动容器,第三个使用自定义bridge网络启动。

然后再将第二个容器添加到自定义网络。这三个容器的网络情况如下

第一个容器:只有默认的docker0

第二个容器:属于两个网络——docker0、自定义网络

第三个容器:只属于自定义网络

说明:通过容器启动指定的网络会覆盖默认bridge网络docker0。

# 创建三个容器 conTainer1,container2,container3

dockerrun-itd--name=container1 busybox

dockerrun-itd--name=container2 busybox

# 创建网络mynet

docker network create -d bridge--subnet 172.25.0.0/16 mynet

# 将容器containerr2连接到新建网络mynet

docker network connect mynet container2

# 使用mynet网络来容器container3

dockerrun--net=mynet --ip=172.25.3.3 -itd --name=container3 busybox

# 查看这三个容器的网络情况

docker network inspect container1# docker0

docker network inspect container2# docker0, mynet

docker network inspect container3# mynet

默认网络与自定义bridge网络的差异

默认网络docker0:网络中所有主机间只能用IP相互访问。通过--link选项创建的容器可以对链接的容器名(container-name)作为hostname进行直接访问。

自定义网络(bridge):网络中所有主机除ip访问外,还可以直接用容器名(container-name)作为hostname相互访问。

# 进入container2内部

docker attach container2

ping-w4container3# 可访问

ping-w4container1# 不可访问

ping-w4172.17.0.2# 可访问container1的IP

# Ctrl+P+Q退出容器,让container2以守护进程运行

默认网络与自定义bridge网络在容器连接的差别

在默认网络中使用link(legency link),有如下功能:

- 使用容器名作为hostname

- link容器时指定alias:--link=:

- 配合--icc=false隔离性,实现容器间的安全连接

- 环境变量注入

自定义网络中使用docker net提供如下功能:

- 使用DNS实现自动化的名称解析

- 一个网络提供容器的安全隔离环境

- 动态地attach与detach到多个网络

- 支持与--link选项一起使用,为链接的容器提供别名(可以是尚不存在链接容器,与默认容器中–link使用的最大差别)

默认网络中的link是静态的,不允许链接容器重启,而自定义网络下的link是动态的,支持链接容器重启(以及IP变化)

因此,使用--link时链接的容器,在默认网络中必须提前创建好,而自定义网络下不必预先建好。

使用docker network connetct将容器连接到新网络中时,用参数--link链接相同的容器时,可以指定不同的别名,它们是针对不同网络的。

#运行容器使用自定义网络,同时使用--link链接尚不存在的container5容器

dockerrun--net=mynet-itd--name=container4--linkcontainer5:c5busybox

#创建容器container5

dockerrun--net=mynet-itd--name=container5--linkcontainer4:c4busybox

#虽然是相同容器,但是在不同的网络环境连接中可以不同的alias链接

dockernetworkconnect--linkcontainer5:foolocal_aliascontainer4

dockernetworkconnect--linkcontainer4:barlocal_aliascontainer5

指定容器在网络范围的别名(Network-scoped alias)

Network-scoped alias就是指定容器在可被同一网络范围内的其他容器访问的别名。

不同于link别名的是,link别名是由链接容器的使用者提供的,只有它自己可使用;

而指定网络范围内别名,是由容器提供给网络中其它容器使用的。

Network-scoped alias:同一网络中的多个容器可以指定相同的别名,在使用的当然只有第一个指定别名的容器才生效,

只有当第一个容器关闭时,指定相同别名的第二个容器的别名才会开始生效。

dockerrun--net=mynet -itd --name=container6 --net-alias app busybox

docker network connect--alias scoped-app local_alias container6

dockerrun--net=isolated_nw -itd --name=container7 --net-alias app busybox

docker network connect--alias scoped-app local_alias container7

# 在container4中

docker attach container4

ping app# 访问container6的IP

# 从container4中以守护进程运行退出:Ctrl+P+Q

docker stop container6

docker attach container4

ping app# 访问的container7的IP

断开网络与移除网络

# 容器从mynet网络中断开(它将无法再网络中的容器container3通讯)

docker network disconnect mynet container2

# 测试与容器container3失败

docker attach container2

ping contianer3 # 访问失败

在多主机的网络环境中,在将容器用已移除的容器名称连接到网络中时会出现container already connected to network的错误,

这时需要将新容器强制移除docker rm -f,重新运行并连接到网络中。

移除网络要求网络中所有的容器关闭或断开与此网络的连接时,才能够使用移除命令:

# 断开最后一个连接到mynet网络的容器

docker network disconnet mynet container3

# 移除网络

docker network rm mynet

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

推荐阅读更多精彩内容