Docker(六)Docker网络相关


 前言

        学习之前需要了解docker相关概念,移步 Docker官网 

        此处不再赘述虚拟化技术和docker VS 虚拟机 的一些内容,有条件的建议直接移步 度娘

        笔记全程操作在华为云务器,CentOS7系统。需要自行准备操作环境。


一. docker网络概述

1.1 docker网络的一些操作

(默认创建三种网络模式)

// 查看docker网络模式命令:
    [root@local ~]# docker network ls
	NETWORK ID     NAME      DRIVER    SCOPE
	6aef6089eee6   bridge    bridge    local
	1d54965e564c   host      host      local
	0c8a22acf265   none      null      local

查看网络源数据

docker network inspect  网络名字

新建自定义网络

docker network create 网络名

删除网络

docker network rm  网络名字

2. docker网络能干吗

  • 容器间的互联和通信以及端口映射

  • 容器IP变动时候可以通过服务名直接网络通信而不受到影响

二. docker网络模式

  • bridge模式:使用--network bridge指定,默认使用docker0。
  • host模式:使用--network host指定。
  • none模式:使用--network none指定。
  • container模式:使用--network container:Name或者容器id。

2.1 bridge模式

2.1.1 bridge模式介绍

Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。

查看 bridge 网络的详细信息,并通过 grep 获取名称项

docker network inspect bridge | grep name

  • Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

  • docker run 的时候,没有指定network的话默认使用的网桥模式就是bridge,使用的就是docker0。在宿主机ifconfig,就可以看到docker0和自己create的network(后面讲)eth0,eth1,eth2……代表网卡一,网卡二,网卡三……,lo代表127.0.0.1,即localhost,inet addr用来表示网卡的IP地址。

  • 网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。

    • 整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth pair);

    •  每个容器实例内部也有一块网卡,每个接口叫eth0;

    • docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。

综上所述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。

2.1.2bridge模式验证

docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8

然后宿主机通过命令 ip addr 查看:可以看到多了veth164和veth166;而veth164对应eth165;veth166对应eth167。

我们进入tomcat81内部,同样使用 ip addr 查看:

然后进入tomcat82内部,同样使用 ip addr 查看:

2.2 host模式

2.2.1 介绍

直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。

容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。

2.2.2 host模式验证

docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8

宿主机使用命令 ip addr查看:

然后进入tomcat83容器内使用 ip addr查看

可以看到这些网络配置几乎是一样的,这就证明了host的理论说明。

那host没有设置-p 的端口映射,访问启动的tomcat83时通过 http://宿主机IP:8080/ 来访问

2.3 container模式

新建的容器和已经存在的一个容器共享一个网络ip配置而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。

2.4 自定义网络模式

前面案例以桥接模式启动了tomcat81和tomcat82,分别进入容器内部,查看对应IP。在容器内部互相ping对方的IP,发现是可以ping通的。但是IP地址其实是会变的,一般都是通过服务名调用,此时ping服务名会发现提示服务名不存在。

此时我们做自定义网络的测试

新建自定义网络

docker network create jj_network

然后新建的容器加入上一步新建的自定义网络

docker run -d -p 8081:8080 --network jj_network --name tomcat81 billygoo/tomcat8-jdk8

docker run -d -p 8082:8080 --network jj_network --name tomcat82 billygoo/tomcat8-jdk8

分别进入tomcat81和tomcat82容器,在tomcat81中ping tomcat82;tomcat82中ping tomcat81

可以看到,两个容器互相ping是可以ping通的。

至此,得出结论:自定义网络本身就维护好了主机名和ip的对应关系(ip和容器名都能通)

至此,Docker网络相关内容结束~


        整,上手整,记忆才更深刻。然后就是不断发现问题,解决问题,才会得心应手,干就完了~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码云说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值