Docker---初识Docker网络

docker0网络详解

我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0。

一、启动两个tomcat容器

[root@localhost ~]# docker run -d -P --name tomcat01 tomcat              # 启动镜像,生成tomcat01容器之后,使用ip addr命令发现多了一对网卡。
[root@localhost ~]# docker run -d -p 3120:8080 --name tomcat02 tomcat    # 启动镜像,生成tomcat02容器之后,使用ip addr命令发现多了一对网卡。
[root@localhost ~]# ip addr                                              # 执行上面两步之后,查看服务器ip地址,发现多了两对网卡。

二、查看两个tomcat容器的ip地址

[root@localhost ~]# docker exec -it tomcat01 ip addr                     # 启动容器时,查看容器的内部网络地址:ip addr,这里显示:172.17.0.2。
[root@localhost ~]# docker exec -it tomcat02 ip addr                     # 启动容器时,查看容器的内部网络地址:ip addr,这里显示:172.17.0.3。

三、测试宿主机和容器、容器和容器之间的网络是否可以通

[root@localhost ~]# ping 172.17.0.2                                      # 在服务器上ping tomcat01容器,即linux服务器上可以ping通docker容器内部。
[root@localhost ~]# ping 172.17.0.3                                      # 在服务器上ping tomcat02容器,即linux服务器上可以ping通docker容器内部。
[root@localhost ~]# docker exec -it tomcat01 ping 172.17.0.3             # 在tomcat01容器中 ping tomcat02容器,可以ping通,即容器之间可以互相ping通。

四、删除容器,发现第一步生成的网卡信息也同时没有了

[root@localhost ~]# docker stop tomcat01      # 停止tomcat01容器
[root@localhost ~]# docker rm tomcat01        # 删除tomcat01容器
[root@localhost ~]# ip addr                   # 查看网卡信息

总结1:tomcat01和tomcat02是共用的一个路由器,即docker0。所有的容器不指定网络的情况下,都是docker0路由的,docker0会给我们的容器分配一个默认的可用IP。

总结2:Docker中的所有的网络接口都是虚拟的,因为虚拟的转发效率高(如内网传递文件)。只要容器删除,对应的网桥一对也没有了。

总结3:docker网络使用桥接模式,使用的技术是veth-pair技术。就是一对虚拟设备接口,他们都是成对出现的。veth-pair充当一个桥梁,连接各种虚拟网络设备的。

总结4:docker0特点:是默认的网络模式,不能通过容器名访问。解决方法:一、--link可以打通连接,二、自定义网络可以打通连接。

容器互联之--link

测试tomcat01容器直接ping tomcat02容器,发现无法ping通,使用--link可以解决这一问题。

[root@localhost ~]# docker exec -it tomcat01 ping tomcat02                      # 无法ping通
[root@localhost ~]# docker run -d -P --name  tomcat03 --link tomcat02 tomcat    # 启动镜像,生成tomcat03容器
[root@localhost ~]# docker exec -it tomcat03 ping tomcat02                      # 可以ping通,因为--link就是在tomcat03容器中的hosts文件中添加了172.17.0.3	tomcat02 b41c08fb9421配置。现在不建议使用了。
[root@localhost ~]# docker exec -it tomcat02 ping tomcat03                      # 无法ping通,即单向的,是因为在tomcat02容器中的hosts文件没有修改配置。

[root@localhost ~]# docker exec -it tomcat03 cat /etc/hosts                     # 查看tomcat03容器的hosts文件

容器互联之自定义网络

一、查看所有的docker网络

[root@localhost ~]# docker network --help  # 查看帮助文档
[root@localhost ~]# docker network ls

二、网络模式

  • bridge      桥接模式(默认的,自己创建的也使用bridge模式),就是在docker上面搭桥。
  • none        不配置网络
  • host        主机模式,就是和宿主机共享网络
  • container   容器内网络连通(用的少)

三、自定义一个网络

[root@localhost ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
--driver bridge           使用的也是桥接模式
--subnet 192.168.0.0/16   子网地址(范围:192.168.0.2-192.168.255.255)
--gateway 192.168.0.1     网关

四、查看自定义网络的信息

[root@localhost ~]# docker network inspect mynet

五、测试容器之间网络连通

[root@localhost ~]# docker run -d -P --name tomcat05 --net mynet tomcat      # 使用自定义网络创建tomcat05容器
[root@localhost ~]# docker run -d -P --name tomcat06 --net mynet tomcat      # 使用自定义网络创建tomcat06容器
[root@localhost ~]# docker exec -it tomcat05 ip addr                         # 查看tomcat05容器的ip地址为:192.168.0.2
[root@localhost ~]# docker exec -it tomcat06 ip addr                         # 查看tomcat06容器的ip地址为:192.168.0.3

[root@localhost ~]# docker exec -it tomcat05 ping tomcat06                   # 可以ping通,不使用--link也可以通过容器名称ping通容器了
[root@localhost ~]# docker exec -it tomcat05 ping 192.168.0.3                # 可以ping通

网络连通:不在同一个网段上的两个容器

一、使用docker0(即bridge)创建一个容器

[root@localhost ~]# docker run -d -P --name tomcat01 tomcat                # 直接启动的命令,默认就带参数--net bridge,而这个就是我们的docker0。
[root@localhost ~]# docker run -d -P --name tomcat02 --net bridge tomcat   # 等同上面的命令,创建tomcat02容器

二、使用mynet 创建一个容器

[root@localhost ~]# docker run -d -P --name tomcat05 --net mynet tomcat 

三、测试两个容器直接的网络连接情况

[root@localhost ~]# docker exec -it tomcat01 ping tomcat05

四、打通不在同一个网段的两个容器的网络连接

[root@localhost ~]# docker network connect mynet tomcat01      # tomcat01容器与mynet这个网段连通
[root@localhost ~]# docker network inspect mynet               # 查看自定义网络mynet的信息

五、再次测试网络连接情况

[root@localhost ~]# docker exec -it tomcat01 ping tomcat05    # 可以ping通
[root@localhost ~]# docker exec -it tomcat02 ping tomcat05    # 不可以ping通,因为tomcat02与mynet这个网络没有连通

 

posted @ 2020-09-08 09:33  刘_love_田  阅读(111)  评论(0编辑  收藏