我们每启动一个docker容器,docker就会给docker容器分配一个IP, 我们只要安装了docker,主机上就会有一个网卡叫docker0——网络模式为桥接模式,使用的技术是evth-pair技术 有了docker0,主机可以ping通容器内部 容器内部可以ping通主机 容器与容器之间也可以ping通 docker0在这里面充当路由器 创建一个容器,docker就会创建两个网卡 evth-pair 就是一对虚拟设备接口,一段连着协议,一段彼此相连,evth-pair 正是有这个特性,才能充当一个桥梁,连接各种虚拟网络设备 Docker网络使用的是Liunx桥接,主机中有一个Docker容器的网桥——docker0
docker0有一个缺点,就是网络连接只能通过IP,不能通过容器名 通过 --link 解决了能通过容器名进行网络连接 eg: docker run -d -P --name tomcat01 --link tomcat02 tomcat 这样 tomcat01 容器内部就可以通过容器名 tomcat02 ping 通tomcat02容器(反向是不可以 ping 通的,即tomcat02 ping不通tomcat01 ) --link 原理:其实就是在/etc/hosts内配置主机映射
虽然有了 --link 来实现能用容器名来进行网络连接,但Docker容器之间的网络通信主要还是使用——————自定义网络 自定义网络: --driver bridge #网络类型 --subnet 192.168.0.0/16 #子网 --gateway 192.168.0.1 #网关 mynet #自定义网络名 eg:docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 了解更多: docker network --help [root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE b2c0e3df8d2a bridge bridge local e1eba2df9aac host host local 819ac5ad129f mynet bridge local #自定义的网络mynet bcb17568b28a none null local [root@localhost ~]# docker network inspect 819ac5ad129f 查看mynet网络的元数据 [ { "Name": "mynet", "Id": "819ac5ad129ff5b92b4af4747d2985371eaff9040c493729c3118b9773439989", "Created": "2021-11-09T09:16:55.317381402+08:00", "Scope": "local", "Driver": "bridge", #网络类型 "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.0.0/16", #子网 "Gateway": "192.168.0.1" #网关 } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ] 自定义网络的使用: docker run -d -P --name tomcat0-net-01 --net mynet tomcat docker run -d -P --name tomcat0-net-02 --net mynet tomcat 测试:都是通的(自定义网络的docker都已经帮我们维护好了对应关系) docker exec -it tomcat0-net-01 ping tomcat0-net-02 docker exec -it tomcat0-net-02 ping tomcat0-net-01
非 mynet 网络下的容器 tomcat01 想要连接 mynet 网络下的容器: eg:docker network connect mynet tomcat01 连通之后就是将 tomcat01网络 放到了 mynet 网络下 测试:也是通的 docker exec -it tomcat01 ping tomcat0-net-01 小结:想要跨网络 *** 作别人,就需要使用 docker network connect 连通
注意:我上面的 tomcat 镜像是自定义镜像,镜像里面是有安装 net-tools 工具的,官方 tomcat 镜像是没有 net-tools 工具的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)