大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
Docker网络
Docker是如何进行网络通讯的?
查看本机的网卡和ip地址
docker0类似与路由器ip地址一样(x.x.x.1)
Docker
docker run -d -P --name=tomcat03 tomcat:8.0
查看容器ip地址
docker exec -it a72d4ae634da ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
31: eth0@if32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
主机和docker容器都能够ping通 docker之间也能互相ping通
我们只要安装了Docker,就会有一个网卡Docker0(x.x.x.1)
我们每启动一个容器.Docker都会为这个容器分配一个ip地址
容器Docker网络和宿主机使用的是桥接技术 evth-pair技术
每次启动一个容器 就多一个网卡(这里启动了两个tomcat)
宿主机ip
容器ip(2个)
我们发现这些容器带来网卡,都是一对儿的
evth-pair 就是一对的虚拟设备接口 他们都是成对出现的,一边连着协议,一边彼此连着
正是因为有了这个特性evth-pair 充当一个桥梁 连接各种虚拟网络设备
测试下tomcat1和tomcat2是否能Ping通
容器和容器之间能ping通
Docker桥接原理图
Docker中所有的网卡都是虚拟的
–link
思考一个场景,我们编写一个微服务,database url=ip 项目不重启 数据库ip换了 但是我们服务不重启 能不能解决这个?可以通过名字来访问容器
# 一个容器直接ping另一个容器名显然ping不通
[root@hadoop100 ~]# docker exec -it tomcat02 ping tomcat03
ping: unknown host tomcat03
#需要通过--link命令联通两个容器
docker run -d -P --name tomcat03 --link tomcat02 tomcat
本质是在tomcat03的host文件加上tomcat02映射
所以tomcatping不通tomcat03
docker network ls #查看本地所有网路
docker network inspect 网络
可以看到Docker桥接的网络网段
没分配一个容器就多一个配置项
自定义网络
docker network ls #查看所有docker网络
网络模式
bridge : 桥接 docker 搭桥(默认)
none:不配置网络
host:和宿主机共享网络
container:容器网络联通(用的少)
#以往我们启动的时候默认 加了参数--net bridge
docker run -d -P --name tomcat01 tomcat
docker run -d -P tomcat01 --net bridge tomcat
#docker0特点 默认 不能直接访问容器名 --link可以打通
#我们可以自定义一个网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#--driver bridge 桥接
#--subnet 子网
#--gateway 网关
docker network ls
docker network inspect mynet #查看自己的网络
用自定义网络启动两个容器
[root@hadoop100 ~]# docker run -d -P --name=mynet-tomcat01 --net mynet tomcat:8.0
703bd79ee23a829d56768baac832e190a7547627d053c63780cb924ffc483ae0
[root@hadoop100 ~]# docker run -d -P --name=mynet-tomcat02 --net mynet tomcat:8.0
342b5509dddbd0e0f1d79348b16d75a6d888df7a821fb8799d04c8d92565ab1e
#检查mynet信息
docker network inspect mynet
"Containers": {
"342b5509dddbd0e0f1d79348b16d75a6d888df7a821fb8799d04c8d92565ab1e": {
"Name": "mynet-tomcat02",
"EndpointID": "9c45de5af3ed87a87656432fee2498969a1ec34cd0c483c79a181a027cd3cddc",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"703bd79ee23a829d56768baac832e190a7547627d053c63780cb924ffc483ae0": {
"Name": "mynet-tomcat01",
"EndpointID": "e9cc47d5986a0069389d10f8ec4fdf897162d4991d98ffc84f82562200610056",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
自己创建的网络,容器可以直接Ping容器名就可以Ping通
[root@hadoop100 ~]# docker exec -it mynet-tomcat01 ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.059 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.065 ms
本质还是在/etc/hosts文件加入容器ip映射
好处:不同的集群使用不同的网络,保证集群是安全和健康的
网络连通
启动两个默认bridge网络容器和两个mynet网络容器
docker run -d -P --name=mynet-tomcat01 --net mynet tomcat:8.0
docker run -d -P --name=mynet-tomcat02 --net mynet tomcat:8.0
docker run -d -P --name=tomcat01 tomcat:8.0
docker run -d -P --name=tomcat02 tomcat:8.0
现在mynet网络中的容器和bridge网络中的容器是Ping不通的
docker exec -it mynet-tomcat01 ping tomcat01 #ping不通
注意bridge默认桥网络中 容器本来就Ping不通 自定义的网络中才能互相Ping通
如果想要让不通网段容器与容器间Ping通,则需要使用connet命令
#将tomcat01容器连接到mynet网络
docker network connect mynet tomcat01
#查看mynet 网络
docker network inspect mynet
#再次测试发现tomcat01可以ping通mynet-tomcat01(tomcat02仍然不可以ping通mynet-tomcat01)
docker exec -it tomcat01 ping mynet-tomcat01
发现mynet网络中添加了tomcat01容器
也就是说在Docker中一个容器可以进入多个网络
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168535.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...