docker五种特性_k8s docker 关系

docker五种特性_k8s docker 关系DockerDocker网络–link自定义网络网络连通Docker网络Docker是如何进行网络通讯的?查看本机的网卡和ip地址docker0类似与路由器ip地址一样(x.x.x.1)Dockerdocker run -d -P –name=tomcat03 tomcat:8.0查看容器ip地址docker exec -it a72d4ae634da ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noque

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号