Docker不同容器之间的网络访问

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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值