Linux企业运维##Docker(三) Docker网络知识详解

目录

前言

一、Docker原生网络

1.bridge网络

2.host网络

3.none网络

4.网络ip分配规则

二、Docker自定义网络

1.自定义网络创建

2.不同网桥的容器进行通信

三、容器通信

1.使用容器名称通信

2.容器访问外网 

3.外网访问容器

四、跨主机容器网络

1.跨主机同网段容器通信

2.跨主机不同网段容器通信


前言

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

网络模式 含义
–network host 容器与真实主机共享IP和端口
–network none 指定关闭容器的网络功能,只保留内部的回环接口
birdge 桥接模式会为每一个容器分配IP,容器通过docker0网桥以及iptables nat表配置与真实主机通信
container 容器与另外一个容器共享IP和端口

一、Docker原生网络

docker安装后会自动创建3种原生网络:bridge、host、none。

1.bridge网络

  • bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。
  • 容器通过宿主机的NAT规则后可以访问外网。

Linux企业运维##Docker(三) Docker网络知识详解_第1张图片

docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口

Linux企业运维##Docker(三) Docker网络知识详解_第2张图片

 (1)安装查看桥接工具 

yum install -y bridge-utils

Linux企业运维##Docker(三) Docker网络知识详解_第3张图片

(2)查看docker0桥接

brctl show docker0

2.host网络

  • host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

Linux企业运维##Docker(三) Docker网络知识详解_第4张图片

(1)关闭harbor仓库,使用host网络模式运行容器

Linux企业运维##Docker(三) Docker网络知识详解_第5张图片

可看到ip地址与test2相同

3.none网络

  • none模式是指禁用网络功能,只有lo接口,在容器创建时使用
    –network=none指定。

(1) 使用none网络模式运行容器

Linux企业运维##Docker(三) Docker网络知识详解_第6张图片

4.网络ip分配规则

(1)先运行两个容器

(2)分别查看两个容器的ip 

docker inspect demo1
docker inspect demo2

demo1: 

Linux企业运维##Docker(三) Docker网络知识详解_第7张图片

demo2: 

Linux企业运维##Docker(三) Docker网络知识详解_第8张图片

(3)关闭demo1和demo2,再重启,启动顺序为先demo2再demo1

Linux企业运维##Docker(三) Docker网络知识详解_第9张图片

(4)再次查看两个容器的ip

demo1:

Linux企业运维##Docker(三) Docker网络知识详解_第10张图片

demo2:

Linux企业运维##Docker(三) Docker网络知识详解_第11张图片

可以看到,当容器stop时,ip地址将会被收回,在开启时重新分配,分配的ip地址按照开启顺序依次递增

二、Docker自定义网络

  • 自定义网络模式,docker提供了三种自定义网络驱动:bridge、overlay、macvlan
    bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。
  • 建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。

1.自定义网络创建

(1)创建自定义网桥

Linux企业运维##Docker(三) Docker网络知识详解_第12张图片

 (2)使用自定义桥接拉起容器demo1,镜像为nginx,查看配置IP 

(3)使用自定义桥接拉起容器busybox,查看IP 

Linux企业运维##Docker(三) Docker网络知识详解_第13张图片

在终端中ping demo1,可以ping通,内置DNS自动做了解析 

2.不同网桥的容器进行通信

(1)删除demo1和自定义网络mynet1,使用带参数的方法重新创建新的自定义网络,使用新的自定义网络mynet1运行demo容器

  • –subnet: 子网掩码
    镜像信任功能能够保证镜像的安全,只有打了信任标签的镜像才能被拉取
  • –gateway: 网关

 Linux企业运维##Docker(三) Docker网络知识详解_第14张图片

(2)使用自定义网络mynet1再启动busybox镜像容器,测试连通性

Linux企业运维##Docker(三) Docker网络知识详解_第15张图片

(3)再创建一个新的自定义网络mynet2,使用自定义网络mynet2再启动busybox镜像容器并尝试ping demo

Linux企业运维##Docker(三) Docker网络知识详解_第16张图片

 此时无法ping通

(4)Ctrl+P+Q将busybox打入后台,为容器busybox配置第二块网卡mynet1

Linux企业运维##Docker(三) Docker网络知识详解_第17张图片

此时busybox可以ping通demo ,再查看其ip,已经有了172.10.0.0网段的ip

三、容器通信

1.使用容器名称通信

Container 网络模式是 Docker 中一种较为特别的网络的模式。
Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。
在容器创建时使用–network=container:vm指定(vm指定的是运行的容器名)

Linux企业运维##Docker(三) Docker网络知识详解_第18张图片 

Linux企业运维##Docker(三) Docker网络知识详解_第19张图片

 

–link 可以用来链接2个容器
–link的格式:
         --link :alias
         name和id是源容器的name和id,alias是源容器在link下的别名。

Linux企业运维##Docker(三) Docker网络知识详解_第20张图片 

2.容器访问外网 

Linux企业运维##Docker(三) Docker网络知识详解_第21张图片

(1)ipforward开启 

 (2)在容器内ping外网

Linux企业运维##Docker(三) Docker网络知识详解_第22张图片

3.外网访问容器

Linux企业运维##Docker(三) Docker网络知识详解_第23张图片

(1)生成demo容器,-p指定映射端口

宿主机把80端口映射到Docker容器上,访问宿主机的80端口就相当于访问Docker的80端口

(2)查看目的地转换规则 

Linux企业运维##Docker(三) Docker网络知识详解_第24张图片

(3)查看网络状态

Linux企业运维##Docker(三) Docker网络知识详解_第25张图片 

采用了双冗余机制,目的地转换规则第4条链或docker-proxy任意一个存在都可以从外网访问到容器

四、跨主机容器网络

  • 跨主机网络解决方案: docker原生的overlay和macvlan,第三方的flannel、weave、calico
  • 众多网络方案是如何与docker集成在一起的:  libnetwork docker容器网络库,CNM (Container Network Model)这个模型对容器网络进行了抽象
  • CNM分三类组件: Sandbox:容器网络栈,包含容器接口、dns、路由表。(namespace) Endpoint:作用是将sandbox接入network (veth pair)                Network:包含一组endpoint,同一network的endpoint可以通信。

Linux企业运维##Docker(三) Docker网络知识详解_第26张图片 

1.跨主机同网段容器通信

macvlan网络方案实现

Linux kernel提供的一种网卡虚拟化技术。

无需Linux bridge,直接使用物理接口,性能极好。

(1)test1和test2新加一块网卡eth1

Linux企业运维##Docker(三) Docker网络知识详解_第27张图片

(2)编写两台虚拟机eth1的配置文件

Linux企业运维##Docker(三) Docker网络知识详解_第28张图片

配置文件内容如下 

Linux企业运维##Docker(三) Docker网络知识详解_第29张图片

(3)两台虚拟机启用eth1网卡并开启混杂模式 

(4)两台虚拟机中都创建macvlan1网络(10.0.0.0)

Linux企业运维##Docker(三) Docker网络知识详解_第30张图片 

(5)在teat1和test2上,使用macvlan1网络运行busybox镜像容器 Linux企业运维##Docker(三) Docker网络知识详解_第31张图片

Linux企业运维##Docker(三) Docker网络知识详解_第32张图片 此时两台虚拟机上的busybox容器可互相ping通

2.跨主机不同网段容器通信

  • macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
  • vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094。

(1)在上一章基础上,在两台虚拟机上再创建macvlan2网络(192.168.0.0)

Linux企业运维##Docker(三) Docker网络知识详解_第33张图片

(2)在test1上使用macvlan1网络运行busybox镜像容器 ,再为该容器添加macvlan2网络

Linux企业运维##Docker(三) Docker网络知识详解_第34张图片

查看test1上busybox的ipLinux企业运维##Docker(三) Docker网络知识详解_第35张图片 可看到已有192.168.0网段的ip

(3) 在test2上使用macvlan2网络运行busybox镜像容器

Linux企业运维##Docker(三) Docker网络知识详解_第36张图片

(4)在test1上的busybox中ping test2中的busybox

Linux企业运维##Docker(三) Docker网络知识详解_第37张图片

可看到成功ping通 

你可能感兴趣的:(linux,docker,运维)