Docker网络
程序员文章站
2022-04-19 11:19:32
...
目录
Docker 0
不同容器之间是如何进行网络通信的?
安装docker后会生成一个docker 0的网卡,我们每启动一个docker容器,docker就会给这个容器分配一个ip,此时docker容器内部获取网络会发现自己的ip,与此同时虚拟机上会多出来一张docker容器的网卡。每新建一个容器,都会成对出现一对儿网卡。
通信原理图如下
只要容器一删除, 对应的一对儿网络便删除了。
–link
容器之间想通过容器名进行通信,需要用-link来绑定
$ docker exec -it tomcat02 ping tomca01 # ping不通
ping: tomca01: Name or service not known
# 运行一个tomcat03 --link tomcat02
$ docker run -d -P --name tomcat03 --link tomcat02 tomcat
5f9331566980a9e92bc54681caaac14e9fc993f14ad13d98534026c08c0a9aef
# 用tomcat03 ping tomcat02 可以ping通
$ 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.115 ms
64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.080 ms
# 用tomcat02 ping tomcat03 ping不通
link连接的实质
就是在hosts配置中添加映射
自定义网络
-link支持容器间通信,但却不支持docker0使用容器名通信。 因此自定义网络就来了
网络模式
bridge :桥接 docker(默认,自己创建也是用bridge模式)
none :不配置网络,一般不用
host :和所主机共享网络
container :容器网络连通(用得少!局限很大)
创建容器指定网络模式
# 我们直接启动的命令 --net bridge,而这个就是我们得docker0
# bridge就是docker0
$ docker run -d -P --name tomcat01 tomcat
等价于 => docker run -d -P --name tomcat01 --net bridge tomcat
# docker0,特点:默认,域名不能访问。 --link可以打通连接,但是很麻烦!
# 我们可以 自定义一个网络
$ docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
启动两个tomcat
两个容器可以通过名字ping通
自定义网络的优点
使用不同的网络,保证集群是安全和健康的
网络连通
两个不同的网络,分别有3个集群。网络一中的1号容器想要和网络二中的2号容器通信,怎么搞?
使用网络连通===》network connect命令~