Your Heart's A Bird Without The Wings To Fly
Docker Network
Docker Network

Docker Network

理解Docker 0

我们每启动一个docker容器,docker就会给容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的是evth-pair技术,在这里,docker0充当的是路由(网关)

–link(不推荐)

思考一个场景,docker中mysql只要重启,ip就会变更,怎么通过名字来访问容器

root@test:~# docker exec -it tomcat02 ping tomcat01
ping: tomcat01: Name or service not known
​
只需要加上--link,就可以通
root@test:~# docker run -d -P  --name tomcat03 --link tomcat02 tomcat
root@test:~# docker exec  -it tomcat03  ping tomcat02
PING tomcat02 (172.17.0.3) 56(84) bytes of data.
64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.079 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.052 ms
​
但是这样,只能3ping通2;2是无法ping通3的
​
原理是在tomcat03添加了本地解析
root@test:~# docker exec -it tomcat03 cat /etc/hosts
172.17.0.3  tomcat02 138c21225ee3
172.17.0.4  32a22e114083
​
现在不推荐使用--link,推荐使用自定义网络,不使用docker0

自定义网络

# docker network ls

查看所有docker网络

网络模式

bridge:桥接docker默认

none:不配置网络

host:和宿主机共享网络

container:容器网络连通(用得少)

测试

创建网络
# docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet 
--driver:类型
--subnet:子网掩码
--gateway:网关
​
测试连接
# docker run -d -P --name tomcat --net mynet tomcat
root@test:~# docker exec -it tomcat ping tomcat01
PING tomcat01 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat01.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.067 ms
​
root@test:~# docker exec -it tomcat ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.061 ms
现在不需要--link也能够ping通

容器之间网络连通

docker network connect

测试

# 将tomcat-01连通到mynet
docker network connect mynet tomcat-01

Leave a Reply

Your email address will not be published. Required fields are marked *