Docker不同容器之间的网络访问
Docker不同容器之间的网络访问1.默认情况下使用Docker0作为路由器进行网络分配和通信Docker安装成功后,会安装一个docker0的网卡,由docker0分配网络和通信,整体流程图如下:从上图中可以看出,容器直接的通信不是直连的,而是通过docker0间接通信,docker默认使用的是桥接模式,每启动一个容器,docker0会自动分配IP地址给容器,例如:docker0的ip为172.
Docker不同容器之间的网络访问
1.默认情况下使用Docker0作为路由器进行网络分配和通信
Docker安装成功后,会安装一个docker0的网卡,由docker0分配网络和通信,整体流程图如下:
从上图中可以看出,容器直接的通信不是直连的,而是通过docker0间接通信,docker默认使用的是桥接模式,每启动一个容器,docker0会自动分配IP地址给容器,例如:docker0的ip为172.17.0.1,则第一个启动的容器ip为172.17.0.2,后启动的容器依次类推。
默认的docker0网络存在如下缺点:
(1)容器间的访问只能通过IP,不能通过容器名称
(2)容器删除重启后,IP地址会发生改变
2,为解决上述问题,docker引入了自定义网络,自定义网络的优势如下:
(1)可以通过容器名称进行通信
(2)通信是互相的,可以互相访问
具体使用如下:
#创建自定义网络mynet,子网192.168.0.0,网关为192.168.0.1
#192.168.0.0/16 表示网络的ip范围为192.168.0.0-192.168.255.255
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#查看docker网络信息
#bridge docker默认的网络
#host 使用宿主机网络
#mynet 创建的自定义网络
[root@liuhongfei ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
22fa1d86d3ac bridge bridge local
5e01455140b7 host host local
e904c0d46764 mynet bridge local
cec62f449ade none null local
#启动两个容器,并指定使用的网络
docker run -d --name tomcat-mynet-02 -p 8081:8080 --net mynet tomcat
docker run -d --name tomcat-mynet-01 -p 8080:8080 --net mynet tomcat
#两个容器可以互相访问
[root@liuhongfei ~]# docker exec -it tomcat-mynet-01 ping tomcat-mynet-02
PING tomcat-mynet-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-mynet-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from tomcat-mynet-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.088 ms
64 bytes from tomcat-mynet-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.090 ms
64 bytes from tomcat-mynet-02.mynet (192.168.0.3): icmp_seq=4 ttl=64 time=0.097 ms
64 bytes from tomcat-mynet-02.mynet (192.168.0.3): icmp_seq=5 ttl=64 time=0.081 ms
[root@liuhongfei ~]# docker exec -it tomcat-mynet-02 ping tomcat-mynet-01
PING tomcat-mynet-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-mynet-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from tomcat-mynet-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.095 ms
64 bytes from tomcat-mynet-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.105 ms
#再启动两个使用docker0的容器,默认使用的就是docker0的网络
docker run -d --name tomcat02 -p 8083:8080 tomcat
docker run -d --name tomcat01 -p 8082:8080 tomcat
3.tomcat01、tomcat02和tomcat-mynet-01、tomcat-mynet-02是否可以通信(两组容器都在不同的网段内,怎么实现通信呢)
#使用docker network connect将容器和网络进行连接
#(注意,是将容器和网络连接,不是网络和网络连接)
docker network connect mynet tomcat01
#查看mynet的网络信息
docker network inspect mynet
#容器tomcat01已经加入mynet网络中
"Containers": {
"04dd7ee9175f97d9414f6f2d15aecccf7f217c3891c73da1b9e514388cc1cd98": {
"Name": "tomcat-mynet-02",
"EndpointID": "9f74c3c9fa538c763089fb6830672f1335157e343bd3aeb802438b28d3af5efa",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"1cc6b4e0d81387951d464487911b1347c2d739b60c6d880bee89f143b94dc747": {
"Name": "tomcat01",
"EndpointID": "bf3c569da6d652ac11b777ebec6a4cd42b6d4c7889c21c0b8ce1be238e4485d2",
"MacAddress": "02:42:c0:a8:00:04",
"IPv4Address": "192.168.0.4/16",
"IPv6Address": ""
},
"2a03e91a52ece08187d4326b8a3ca7d39edc8abaf79375381beb12d5bd7118b9": {
"Name": "tomcat-mynet-01",
"EndpointID": "96b8ed0d383e751572a3ffbdba413e70e9a7d53eee971b1cdd44f244d235212e",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
#查看tomcat01能否访问tomcat-mynet-01和tomcat-mynet_02
#可以正常访问
[root@liuhongfei ~] docker exec -it tomcat01 ping tomcat-mynet-01
PING tomcat-mynet-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-mynet-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from tomcat-mynet-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.097 ms
64 bytes from tomcat-mynet-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.091 ms
64 bytes from tomcat-mynet-01.mynet (192.168.0.2): icmp_seq=4 ttl=64 time=0.092 ms
[root@liuhongfei ~] docker exec -it tomcat01 ping tomcat-mynet-02
PING tomcat-mynet-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-mynet-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.085 ms
64 bytes from tomcat-mynet-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.091 ms
64 bytes from tomcat-mynet-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.093 ms
64 bytes from tomcat-mynet-02.mynet (192.168.0.3): icmp_seq=4 ttl=64 time=0.090 ms
4.自定义网络的整体概括图
5.自定义网络的意义
应用集群下,docker容器间的的网络通信,将变得更加方便
更多推荐
所有评论(0)