docker 默认bridge与用户自定义bridge差别

11 篇文章 1 订阅

上一篇讲到 新建容器之后,是默认连到bridge网络上的,那么我们自己可以自定义bridge吗,答案是可以的。
首先先讲–link这个命令,–link可以给容器添加一个dns记录,然后就可以用名字访问,而不需每次都使用ip进行访问。

1、测试–link 效果
先删除test2,然后新建test2容器时加上–link test1 .
发现在test2容器里可以直接ping通test1,而在test1容器中是ping不通test2的,这是因为–link只在test2中加了,而没有在test1中加,所以test1才会无法找到test2.

[root@vol ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
da0dd80d5418        busybox             "/bin/sh -c 'while t…"   About an hour ago   Up About an hour                        test2
dfe2c0f67d68        busybox             "/bin/sh -c 'while t…"   5 hours ago         Up 5 hours                              test1
[root@vol ~]# docker stop test2
test2
[root@vol ~]# docker rm test2
test2
[root@vol ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
dfe2c0f67d68        busybox             "/bin/sh -c 'while t…"   5 hours ago         Up 5 hours                              test1
[root@vol ~]# docker run -d --name test2 --link test1  busybox /bin/sh -c "while true; do sleep 3600;done"
f0b499d0f47fee55f5acbe945987d60427fe218748a29791b649f1d6fda01976
[root@vol ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f0b499d0f47f        busybox             "/bin/sh -c 'while t…"   20 seconds ago      Up 19 seconds                           test2
dfe2c0f67d68        busybox             "/bin/sh -c 'while t…"   5 hours ago         Up 5 hours                              test1
[root@vol ~]# docker exec -it test2 /bin/sh
/ # ping test1
PING test1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.192 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.111 ms
^C
--- test1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.111/0.151/0.192 ms
/ # ping 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.112 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.120 ms
^C
--- 172.17.0.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.112/0.116/0.120 ms
/ # exit
[root@vol ~]# docker exec -it test1 /bin/sh
/ # ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.147 ms
64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.126 ms
^C
--- 172.17.0.3 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 0.091/0.118/0.147 ms
/ # ping test1
ping: bad address 'test1'
/ # exit

–link命令在实际场景中很少使用到,只是需要知道有这么个东西而已。

自定义bridge

1、已有独立的test1、test2容器,新建my-bridge网络
2、新建test3容器,给test3指定使用my-bridge网络
3、将test2容器连上my-bridge网络,发现多出一对veth,将test2与my-bridge相连
4、发现my-bridge网络内,可以直接使用名称(test2、test3)通信,但是在默认的bridge则无法直接使用名称通信。

## 删除重建test2容器(不加link),再新建bridge网络
[root@vol ~]# docker network connect my-bridge test2

##查看bridge网络,发现多出一个my-bridge,上面没有接任何的veth
[root@vol ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-2f8c8b64bd54         8000.02428af001f3       no
docker0         8000.02429de34769       no              veth12e39da
                                                        veth9d0b56c
                                                       
[root@vol ~]# docker network list
NETWORK ID          NAME                DRIVER              SCOPE
0ee165ccab6f        bridge              bridge              local
baa1cdd2d1e4        host                host                local
2f8c8b64bd54        my-bridge           bridge              local
2cb2a0e5dad5        none                null                local

##新建test3容器,使用--network指定连接my-bridge网络
[root@vol ~]# docker run -d --name test3 --network my-bridge   busybox /bin/sh -c "while true; do sleep 3600;done"
f48076de35d46d347268aff6d5765cce1aa7dd6179058f2bb92f9f95521ecfba
[root@vol ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f48076de35d4        busybox             "/bin/sh -c 'while t…"   6 seconds ago       Up 5 seconds                            test3
f3d2618e170f        busybox             "/bin/sh -c 'while t…"   2 minutes ago       Up 2 minutes                            test2
dfe2c0f67d68        busybox             "/bin/sh -c 'while t…"   6 hours ago         Up 6 hours                              test1

##test3容器连上了my-bridge网络,此时再把test2网络连上my-bridge,发现test2有两对veth,分别连着bridge和my-bridge网络
[root@vol ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-2f8c8b64bd54         8000.02428af001f3       no              vetha371974
docker0         8000.02429de34769       no              veth12e39da
                                                        veth9d0b56c
[root@vol ~]# docker network -h
Flag shorthand -h has been deprecated, please use --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.
[root@vol ~]# docker network connect my-bridge tets2
Error response from daemon: No such container: tets2
[root@vol ~]# docker network connect my-bridge test2
[root@vol ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-2f8c8b64bd54         8000.02428af001f3       no              vetha371974
                                                        vethbf5bb4a
docker0         8000.02429de34769       no              veth12e39da
                                                        veth9d0b56c

##进到test2测试,可以直接ping通test3,但是无法ping通test1,进到test3可以ping通test2,但是进到test1,却无法ping通test2
[root@vol ~]# docker exec -it test2 /bin/sh
/ # ping test3
PING test3 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.136 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.114 ms
^C
--- test3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.114/0.125/0.136 ms
/ # ping test1
ping: bad address 'test1'
/ # exit
[root@vol ~]# docker exec -it test3 /bin/sh
/ # ping test2
PING test2 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.098 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.168 ms
^C
--- test2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.098/0.133/0.168 ms
/ # ping test1
ping: bad address 'test1'
/ # exit
[root@vol ~]#

结论:自定义的bridge是有dns的,可以直接使用名称通信,而默认的bridge则没有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值