docker网络

目录

一、概述

二、bridge模式

2.1、网桥工作原理:

2.2、docker网桥工作原理

2.3、验证测试

三、host模式

四、自定义网络

对应的网络拓扑图:

4.1使用docker network create命令在docker内自定义一个网络

4.2启动两个容器测试,使用刚刚自定义的网络mynet

4.3测试ping容器名和IP地址,看看能不能ping通

4.4配置网络连通


一、概述

docker run创建Docker容器时,可以用--net选项指定容器的网络模式。

Docker有以下多种种网络模式:
 

docker网络模式
bridge模式使--net =bridge指定,默认设置;这是默认的网络驱动程序(不指定驱动程序创建的容器默认是bridge驱动)
host模式使--net =host指定;主机网络。消除容器和主机的网络隔离,直接使用主机的网络
none模式使--net =none指定;表示关闭容器的所有网络连接
container模式使--net =container:NAMEorID指定。(局限大,很少用)
overlay覆盖网络。可以将多个Docker守护进程连接,实现跨主机容器通讯(swarm集群)
macvlan将MAC地址分配给容器,使容器作为网络上的物理设备。不通过Docker主机网络栈进行路由,直接通过MAC地址路由到容器。
自定义网络自己设置网关,每个容器的ip
网络插件可以通过Docker安装和使用第三方网络插件

使用docker network ls来查看docker网络模式

[root@zhoujunru ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
1a1e6b67637f        bridge              bridge              local
95d22f1b2507        host                host                local
2ddda9c8493a        none                null                local

使用docker network inspect network-id命令查看一个具体网络的详细信息

二、bridge模式

2.1、网桥工作原理:

       网桥是数据链路层的工作设备,它的工作原理类似于交换机的工作原理,是根据数据包的目的MAC地址来转发数数据。当一个数据包到达网桥的一个接口时,网桥会读取数据包的目的MAC地址,并将其保存在一个转发表中,然后,网桥会检查这个MAC地址是否在转发表中,如果目的MAC地址在转发表中,则网桥会将数据包转发到相应的接口,并更新转发表中信息。如果目的MAC地址不在转发表中,则网桥会将数据包广播到所有的其他接口,以便寻找目的设备的位置。通过这种工作原理,网桥可以根据目的MAC地址来进行有针对性的转发,来提高网络的传输效率和数据安全性。

       在docker网络中,docker0网桥是一个用于连接多个docker容器的虚拟网络设备。它实际上是一个liuux内核的虚拟交换机,与物理交换机相似。但是只能在主机内部进行通信。它的作用是将多个docker容器连接在同一逻辑网段中,实现docker容器之间的通信。

       在网络层面,通常通过路由器来实现不同网段之间的通信。而网桥主要用于连接同一网段内的设备,连接不同网段的设备和网络通常需要使用路由器。在某些情况下,网桥也可以用于实现不同网段之间的通信,这种方式被称为桥接路由。
桥接路由是一种将两个不同网段连接起来的技术,其中通过网桥将两个网段连接起来 ,然后设置网桥接口的IP地址作为两个网段的默认网关,从而实现两个网段之间的互相通信。

2.2、docker网桥工作原理

       当启动一个docker容器时,docker将会为它创建一个虚拟以太网接口(veth-pair),其中一个端点连接到docker宿主机上,一个端点连接搭配容器内部。这个虚拟以太网设备实际上是两个veth-pair设备,一个在容器内部,一个在宿主机上。Docker网桥(docker0)将这些连接到同一网桥上的容器之间的流量转发到正确的容器上去,从而实现容器之间的通信。

        在docker内部,docker网桥(docker0)还内置了dhcp服务器,能够自动为新创建的容器分配IP地址,并设置默认网关等网络参数。因此,docker容器会被自动分配到相同的网段中,这个网段是docker网桥的所处的网段。

        一般Docker会使用172.17.0.0/16这个网段,并将172.17.0.1/16分配给docker0网桥(在主机上使用ip addr命令是可以看到docker0,在宿主机上作为一块虚拟网卡使用)

2.3、验证测试

分别运行centos01、centos02容器

观察现象:

# centos01 --- linux主机     veth0ec6ae3@if28           ---- 容器内 eth0@if29

# centos02 --- linux主机     vethb41650c@if30           ---- 容器内 eth0@if31

# 只要启动一个容器,就有一对网卡

# veth-pair 就是一对的虚拟设备接口,它都是成对出现的。一端连着协议栈,一端彼此相连着。

# 正因为有这个特性,它常常充当着一个桥梁,连接着各种虚拟网络设备

在centos02容器中测试与宿主机和其他容器的网络连通性。

对应的网络拓扑图:

 

三、host模式

如果启动容器的时候使用host模式,是和宿主机共用一个网络。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

使用host模式启动容器centos03:

使用host模式启动容器后看到,使用ip addr查看网络环境时,看到的都是宿主机上的信息。这种方式创建出来的容器,可以看到host上的所有网络设备。这种方式是不安全的。如果在隔离良好的环境中(比如租户的虚拟机中),可以使用这种方式。

四、自定义网络

使用自定义网络的好处就是网络隔离。

对应的网络拓扑图:

4.1使用docker network create命令在docker内自定义一个网络

[root@zhoujunru ~]# docker network create --help

Usage:	docker network create [OPTIONS] NETWORK

Create a network

Options:
      --attachable             Enable manual container attachment
      --aux-address map        Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
  -d, --driver string          Driver to manage the Network (default "bridge")
      --gateway stringSlice    IPv4 or IPv6 Gateway for the master subnet
      --help                   Print usage
      --internal               Restrict external access to the network
      --ip-range stringSlice   Allocate container ip from a sub-range
      --ipam-driver string     IP Address Management Driver (default "default")
      --ipam-opt map           Set IPAM driver specific options (default map[])
      --ipv6                   Enable IPv6 networking
      --label list             Set metadata on a network (default [])
  -o, --opt map                Set driver specific options (default map[])
      --subnet stringSlice     Subnet in CIDR format that represents a network segment

4.2启动两个容器测试,使用刚刚自定义的网络mynet

再来查看下mynet网络的详细信息

4.3测试ping容器名和IP地址,看看能不能ping通

4.4配置网络连通

配置处于docker0网桥的所在网络的容器centos02与处于自定义网络中的容器cento04能够互相ping通。

使用docker network connect 命令连接容器cento02到另外一个网络mynet

此时centos02与centos04容器能够互相ping通。

再次测试centos01与centos04能不能互相ping通过。发现不能ping通,原因是配置网络连接。

结论:处于不同网络的容器如果要跨网络与其他容器通信,就需要使用 docker network connect [OPTIONS] NETWORK CONTAINER 连接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值