原创文章,欢迎转载。转载请注明:转载自 IT人故事会,谢谢!
原文链接地址: 『中级篇』 Docker Bridge详解(26)
上节主要学习了network-namespace,并创建了network-namespace,并把2个network-namespace连接在一起,我们也演示了创建一个容器test1和test2,其实在创建容器的同时也创建了对应的一个network-namespace,因为对应的一个容器他有自己的独立网络空间。test1通过exec ip a的方式查看对应的ip,和test2 通过exec ip a的方式查看对应的ip。他们之前是互相可以ping通的。
到底docker的网络是如何配置的
sudo service docker restart sudo docker container start test1 sudo docker container start test2 sudo docker docker exec -it test1 /bin/sh ping www.baidu.com
这里的代码紧接上一节,vagrant启动虚拟机docker-node1,通过docker-node1启动里面的容器test1 和test2,当进入test1容器,ping baidu发现可以ping通。这是什么原理呢,肯定是通过可以转接的方式,容器---虚拟机----宿主机--baidu。
为了更好的了解docker网络
停止test2,删除test2
sudo docker ps sudo docker stop test2 sudo docker rm test2 sudo docker ps
docker 网络
可以看到一个 ,这也是linux中常见的一种网络结构。桥接的形式
sudo docker network ls
对于test1 来讲,他是通过bridge的方式
sudo docker inspect test1
ip a
这个机器有5个网路,除了lo,eth0,eth1,docker0,veth8765ce0@if5,上节课讲过veth其实是连接了2个networknamespace,veth8765ce0@if5是负责连接docker0上边的,容器test1里面也应该有个和veth连接的。
sudo docker exec test1 ip a
eth0@if6 和外边的veth8765ce0@if5 其实是一对。
查看他们的关系
sudo yum install -y bridge-utils#安装后可以运行brctl这个命令了brctl
brctl show
因为目前就一个test1的桥接,所以就显示一个。
sudo docker run -d --name test2 busybox /bin/sh -c "while true; do sleep 3600;done"brctl show sudo docker network inspect bridge ip a
多创建了容器,其实多了一对veth,容器内多了veth,宿主内也增加了veth,其实就类似一个线,他们互相连接。
test1 和test2 之前通过docker0,docker0 类似test1和test2之前的路由器,docker0 在通过nat的eth0连接互联网
PS:主要理解容器之前如何的互相访问,容器和外边的世界如何通信。
回贴