Docker的网络通信

Docker的网络通信,第1张

Docker的网络通信
我们每启动一个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 工具的

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5433856.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存