Docker网络通信

        Docker的容器运行在宿主机的虚拟机上。这些虚拟机彼此独立,彼此之间没有任何接
口,即容器彼此之间是逻辑隔离的。
        那么,如何实现容器的相互通信呢?容器又如何访问外部的网络呢?外部的网络如何才能
访问部署在容器内的应用呢?

1.Docker容器网络通信的基本原理

        Docker容器中的网络接口默认都是虚拟接口。虚拟接口的最大优势是转发效率极高。
这是因为Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,即发送接口缓
存中的数据包会被直接复制到接收接口的缓存中,而无须通过外部的物理网络设备进行交
换.
        Docker 的网络很好地利用了 Linux 虚拟网络技术,在宿主机的物理网卡和容器内分别
创建-个虚拟接口(veth),并让它们通过宿主机的 docker 网桥进行连接,如图。我
们把样的一对veth叫作veth pair
1.查看Docker容器网络
1)基于Centos的镜像创建一个容器,并进入该容器内。
[root@node01 ~]# docker run -it dokken/centos-8 /bin/bash        //运行并进入容器内部
[root@262c6d461971 /]# cd /etc/yum.repos.d/    //切换到yum源仓库
[root@262c6d461971 yum.repos.d]# rm -rf *    //删除所有yum源
[root@262c6d461971 yum.repos.d]# ls        //查看你是否删除
[root@262c6d461971 yum.repos.d]# curl -o /etc/yum.repos.d/CentOS-Linux-Baseali.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo        //在阿里云拉取yum源
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     100  2495  100  2495    0     0  13633      0 --:--:-- --:--:-- --:--:-- 13633
[root@262c6d461971 yum.repos.d]# ls    //查看是否拉取成功
CentOS-Linux-Baseali.repo        //yum源

2)为了查看容器的网络信息,在容器内安装 “net-tools” 网络工具

[root@71794aa7cc2a /]# yum -y install net-tools

3)在宿主机上打开一个命令行窗口,执行以下命令查看宿主机的docker0网桥

4)在容器内执行以下命令查看容器网络信息
[root@71794aa7cc2a /]# ifconfig 

        对比 第三步图和第四步图可以发现,容器内的网路地址与宿主机的网络地址具有相同的flags即
flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 。这说明了在创建容器时,会成对的创建 veth pair,并且他们通过宿主机的docker0网桥镜像通信

2.宿主机与Docker容器建立网络通信过程

        Docker默认采用的是bridge 网络通信模式,如图,说明了在创建Docker容器时建立网络通信的过程。
文字描述过程
  1. 客户端执行 “docker run” 命令创建并启动容器。
  2. Docker引擎创建一对虚拟接口 veth pair,并把它们分别放到宿主机和新容器的网络命名空间中。
  3. Docker引擎讲宿主机上的 veth 接口连接到宿主机的docker0 网桥上,并且给它分配一个 “veth” 开头的命令,如 veth66e425
  4. Docker引擎容器上的veth 接口改名为eth0 ,并在该接口只有容器内网络命名空间中式可见的
  5. Dockers引擎从宿主机的docker0网桥上分配一个空闲的ip地址给容器内的eth0
    例如172.17.0.2。并将容器内eth0的路由网关设置为docker0的内部P地址,例
    如:172.17.0.1。
完成以上的这些步骤后,容器就可以使用其内部的虚拟接口“eth0”来连接到其他的容
器和计问外部的网络了。

3.使用命令查看Docker的网络配置信息

        docker network”命令用于查看Docker的网络配置信息。如图展示了该命令的帮助信息
下面通过例子来说明这些命令的使用方式
1)利用以下命令查看Docker的网络通信模式
[root@node01 ~]# docker network ls

2)查看bridge模式的详细信息输入以下命令,如图所示
[root@node01 ~]# docker network inspect 545585585ff2    //网络的ID号这里查看的是bridge的详细信息

        从上图可以看出,bridge模式默认的子网地址是 “172.17.0.0/16” 对比第四步 4)图 可以发现,容器的IP地址是“172.17.0.3” 属于bridge网络的子网地址。
 
111
  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值