docker网络(二)

docker网络是如何和宿主机相通的

先用docker命令查看下我们的docker网络

docker network list

可以看到网络列表 

NETWORK ID          NAME                DRIVER              SCOPE
bd45b573efca        bridge              bridge              local
dffe767ef55b        com-sig             bridge              local
b58d4f1da54c        host                host                local
77d57a8a8f61        none                null                local

然后我们查看指定网络信息 

docker inspect network bd45b573efca

可以看到test1容器的网络信息 

"Containers": {
            "07f5643a681c19fb9d8907c62631478123e8e1bb520d7c579a8c231500147bbd": {
                "Name": "test1",
                "EndpointID": "e28c35eb738ed69124d26ab141e220a18016eaf11a6c703b932e012c8b09b20e",
                "MacAddress": "02:42:ac:12:00:04",
                "IPv4Address": "172.18.0.4/16",
                "IPv6Address": ""
            },
}

test1这个容器连接的是docker0这个桥。我们可以通过ip a查看网桥和接口 

可以看到docker0信息

docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:54:68:91:f7 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:54ff:fe68:91f7/64 scope link 
       valid_lft forever preferred_lft forever

也可以看到veth的接口信息,test容器的网络其实是通过vetch的接口连接到docker0上的 

sudo docker exec test1 ip a

可以看到test容器的veth接口,该接口连接的就是docker0网桥 

接下来我们安装个工具

sudo apt-get install bridge-utils
brctl show  

这样看到docker0连接的接口veth077a502,而该接口就是和容器连接的接口

bridge name	  bridge id		    STP        enabled	interfaces
docker0		  8000.          0242546891f7	no		veth077a502

这样,容器和宿主机就连接了。

多个容器如何实现网络互联

每个容器通过自己的veth连接docker0网桥,从而达到网络互联的目的
1.png
而bridge0可以通过nat映射访问外网
2.png

多个容器之间互联

可以通过link进行连接,但是link是单向的,比如

docker run -d --name test2 --link test1 busybox /bin/sh -c "while true; do sleep 3000; done"

test2是单方向连接test1,也就是从test2中可以访问test1,而test1是无法访问test2的 

可以通过构建network实现两个容器互相访问

docker network create -d bridge com-sig

输入 

docker network ls

可以看到docker网络 

NETWORK ID          NAME                DRIVER              SCOPE
bd45b573efca        bridge              bridge              local

启动新的容器指定network为com-sig 

docker run -d --name test2 --network com-sig busybox /bin/sh -c "while true; do sleep 3000; done"

对于已经存在的容器,可以通过connect命令将两个容器连接到一个网络 

docker network connect com-sig test1

上述命令将test1连接到com-sig网络里,这样test1和test2就可以通信了。 

感谢关注我的公众号

wxgzh.jpg

posted @ 2020-11-30 17:10  恋恋风辰  阅读(97)  评论(0编辑  收藏  举报