小知识:Docker 网络命令详解

docker network create

•docker network connect

•docker network ls

•docker network rm

•docker network disconnect

•docker network inspect

创建网络

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
zane@zane-v:~$ docker network create simple-network
zane@zane-v:~$ docker network inspect simple-network
{
“name”: “simple-network”,
“id”: “8bf58f43c56622d1100f7da9ef6506e45a4aa68556b586311f3756130c311d75”,
“scope”: “local”,
“driver”: “bridge”,
“enableipv6”: false,
“ipam”: {
“driver”: “default”,
“options”: {},
“config”: [
{
“subnet”: “172.20.0.0/16”,
“gateway”: “172.20.0.1/16”
}
]
},
“internal”: false,
“containers”: {},
“options”: {},
“labels”: {}
}

•进入一个键值存储。引擎支持consul,etcd,zookeeper.

•在群集中的每个主机上正确配置的deamon引擎

支持overlay网络的docker选项:

•–cluster-store-opt

使用–subnet选项直接指定子网络,在bridge网络中只可以指定一个子网络,而在overlay网络中支持多个子网络。

除了–subnet,还可以指定:–gateway,–ip-range,–aux-address选项。
?
1
2
3
4
5
6
7
8
$ docker network create -d overlay \
–subnet=192.168.0.0/16 \
–subnet=192.170.0.0/16 \
–gateway=192.168.0.100 \
–gateway=192.170.0.100 \
–ip-range=192.168.1.0/24 \
–aux-address=”my-switch=192.168.1.6″ \
–aux-address=”my-nas=192.170.1.6″ \

如何要创建自己定制的网络,docker也是支持很多选项的。

可以指定网络的端口号:
?
1
2
3
4
5
6
$ docker run -d -p –name redis –network my-network redis
$ docker ps
container id image command created status ports names
bafb0c808c53 redis “/entrypoint.sh redis” 4 seconds ago up 3 seconds 172.23.0.1:32770->6379/tcp redis

连接容器

可以连接已存在的容器到一个或者多个网络中。一个容器可以连接到多个不同网络驱动的网络中。

当连接一旦建立,容器便可以可其他的容器通讯,通过ip 或者 容器名称。

基本容器网络实例:

1.创建两个容器,container1 和 container2

?
1
2
3
4
5
$ docker run -itd –name=container1 busybox
$ docker run -itd –name=container2 busybox
zane@zane-v:~$ docker network create -d bridge –subnet 172.25.0.0/16 isolated_nw

3.连接container2到这个网络,然后验证一下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
zane@zane-v:~$ docker network connect isolated_nw container2
zane@zane-v:~$ docker network inspect isolated_nw
{
“name”: “isolated_nw”,
“id”: “a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b”,
“scope”: “local”,
“driver”: “bridge”,
“enableipv6”: false,
“ipam”: {
“driver”: “default”,
“options”: {},
“config”: [
{
“subnet”: “172.25.0.0/16”
}
]
},
“internal”: false,
“containers”: {
“e9bce535ae32945f5e43340facdb6c16c93d92119e85b61c6cb7a5379a0caf63”: {
“name”: “container2”,
“endpointid”: “ef7244d32484407c3ec4aa30b7bdb0a6cbe3dbbfedc03e5c856ad20a08af172f”,
“macaddress”: “02:42:ac:19:00:02”,
“ipv4address”: “172.25.0.2/16”,
“ipv6address”: “”
}
},
“options”: {},
“labels”: {}
}

注意container2,自动分配到了ip地址。此时container1,仍然连接在默认的bridge网络。

4.启动第三个container,但是这是使用–ip 选项指定它的ip地址,

?
1
zane@zane-v:~$ docker run –network=isolated_nw –ip=172.25.3.3 -itd –name=container3 busybox

5.检查container3使用的是哪个网络:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
“networks”: {
“isolated_nw”: {
“ipamconfig”: {
“ipv4address”: “172.25.3.3”
},
“links”: null,
“aliases”: [
“adf68dd9e09c”
],
“networkid”: “a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b”,
“endpointid”: “71d5d272d056b6111a83f0843a10d1944f1648f34d5099258d5865d053a939b0”,
“gateway”: “172.25.0.1”,
“ipaddress”: “172.25.3.3”,
“ipprefixlen”: 16,
“ipv6gateway”: “”,
“globalipv6address”: “”,
“globalipv6prefixlen”: 0,
“macaddress”: “02:42:ac:19:03:03”
}
}
}

6.检查container2使用的是哪个网络:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
“networks”: {
“isolated_nw”: {
“aliases”: [
“e9bce535ae32”
],
“endpointid”: “ef7244d32484407c3ec4aa30b7bdb0a6cbe3dbbfedc03e5c856ad20a08af172f”,
“gateway”: “172.25.0.1”,
“globalipv6address”: “”,
“globalipv6prefixlen”: 0,
“ipamconfig”: {},
“ipaddress”: “172.25.0.2”,
“ipprefixlen”: 16,
“ipv6gateway”: “”,
“links”: null,
“macaddress”: “02:42:ac:19:00:02”,
“networkid”: “a8208641505d2d8fc37bf7cbd1027c01f0def461815786e076ef4ae65b7b2f9b”
}
},

注意:container2 在两个网络中间,它加入了默认bridge网络,当你在创建它的时候,然后又连接它到了isolation_nw.

一个容器可以连接到多个网络中

%小知识:Docker 网络命令详解-猿站网-插图

7.使用docker attach 命令连接一个正在运行的容器,然后查看

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
zane@zane-v:~$ docker attach container2
/ # ifconfig -a
eth1  link encap:ethernet hwaddr 02:42:ac:19:00:02
inet addr:172.25.0.2 bcast:0.0.0.0 mask:255.255.0.0
inet6 addr: fe80::42:acff:fe19:2/64 scope:link
up broadcast running multicast mtu:1500 metric:1
rx packets:86 errors:0 dropped:0 overruns:0 frame:0
tx packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
rx bytes:11780 (11.5 kib) tx bytes:648 (648.0 b)
eth2  link encap:ethernet hwaddr 02:42:ac:11:00:03
inet addr:172.17.0.3 bcast:0.0.0.0 mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:3/64 scope:link
up broadcast running multicast mtu:1500 metric:1
rx packets:23 errors:0 dropped:0 overruns:0 frame:0
tx packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
rx bytes:3809 (3.7 kib) tx bytes:648 (648.0 b)
lo  link encap:local loopback
inet addr:127.0.0.1 mask:255.0.0.0
inet6 addr: ::1/128 scope:host
up loopback running mtu:65536 metric:1
rx packets:0 errors:0 dropped:0 overruns:0 frame:0
tx packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
rx bytes:0 (0.0 b) tx bytes:0 (0.0 b)

8.可以通过容器名称来相互连接

?
1
2
3
4
5
6
7
/ # ping -w 4 container3
ping container3 (172.25.3.3): 56 data bytes
64 bytes from 172.25.3.3: seq=0 ttl=64 time=0.077 ms
64 bytes from 172.25.3.3: seq=1 ttl=64 time=0.049 ms
64 bytes from 172.25.3.3: seq=2 ttl=64 time=0.047 ms
64 bytes from 172.25.3.3: seq=3 ttl=64 time=0.054 ms

虽然container1 和 container2 都在bridge网络中,但是他们是不支持 容器名称通信的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
zane@zane-v:~$ docker attach container2
/ # ping container3
ping container3 (172.25.3.3): 56 data bytes
64 bytes from 172.25.3.3: seq=0 ttl=64 time=0.042 ms
64 bytes from 172.25.3.3: seq=1 ttl=64 time=0.050 ms
64 bytes from 172.25.3.3: seq=2 ttl=64 time=0.063 ms
— container3 ping statistics —
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.042/0.051/0.063 ms
/ # ping -w 4 container1
ping: bad address container1
/ # ping -w 4 172.17.0.2
ping 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.104 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.052 ms
64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.127 ms
64 bytes from 172.17.0.2: seq=3 ttl=64 time=0.057 ms
— 172.17.0.2 ping statistics —
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.052/0.085/0.127 ms

注意退出attach 时,使用ctr-p + ctr-q.

如果使用ctr-d 则会stop container.
?
1
2
3
4
5
6
zane@zane-v:~$ docker attach container3
/ # ping -w 4 172.17.0.2
ping 172.17.0.2 (172.17.0.2): 56 data bytes
— 172.17.0.2 ping statistics —
4 packets transmitted, 0 packets received, 100% packet loss

上面的实验我们知道,用户自定义的网络,是可以相互解析容器名的,也就是可以用容器名来相互同行。

•定义网络别名 •–link=container-name:alias

1.断开container2和isolated_nw的连接,然后

?
1
2
3
zane@zane-v:~$ docker network disconnect isolated_nw container2
zane@zane-v:~$ docker network rm simple-network

•创建网络 •docker network create simple-network

•overlay网络条件 •进入一个键值存储

•支持overlay网络的docker选项 •–cluser-store

•指定子网络,网关,地址范围

•将容器添加到网络中 •docker network connect isolated_nw container2

•连接一个正在运行的容器 •docker attach

•attach 的退出 •ctr p + ctr q

•默认bridge网络不支持,容器名称通信,其他网络支持; •使用link 来支持默认网络的容器名称通信

•断开连接

•docker network disconnect isolated_nw container2

•删除网络

•docker network rm simple-network

•检测网络

•docker network inspect isolated_nw

原文链接:http://www.cnblogs.com/Aiapple/p/6991606.html

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Linux系统中安装gcc和kernel-devel的方法

2023-4-17 11:32:34

建站知识

小知识:Nginx 重定向时获取域名的方法示例

2023-4-17 11:37:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索