Docker容器技术之Dokcer networking

我们知道,docker容器中的资源用namespace进行了隔离,每一个容器中都有自己独立的一套网络资源,docker容器如何实现单机通讯与跨主机通讯呢?本节内容将为你解答这个问题。

本节索引:

一、Docker networking相关概念

二、Docker单主机容器通信

三、Docker单主机网络配置示例

四、Dokcer跨主机容器通信介绍

 

1

一、Docker networking相关概念

Docker单主机网络创建过程:

1、创建一对虚拟接口,分别放到本地主机和新容器的命名空间中。

2、本地主机一端的虚拟接口连接到默认的docker0网桥或指定网桥上,并具有

一个以veth开头的唯一名字,如veth1234

3、容器一端的虚拟接口将放到新创建的容器中,并修改名字为eth0。这个接口

只在容器的命名空间可见。

4、从网桥可用地址段中获取一个空闲地址分配给容器的eth0(如:172.17.0.2/16),

并配置默认路由网关为docker0网卡的内部接口docker0的IP地址。

 

完成这些配置后,容器就可以使用它所能看到的eth0虚拟网卡来连接其他容器和

访问外部网络。

 

另外,可以在docker运行时通过–net参数来指定容器的网络配置,有四个可选值:

–net=bridgeBridged container 桥接式容器

–net=hostJoined container 联盟式容器

–net=noneClosed container 闭合式容器

–net=containerOpen container 开放式容器

 

四种容器networking结构对比:

2

 

 

二、Docker单主机容器通信

1、bridge模式:

docker容器默认使用bridge模式,在Docker网桥上为容器创建新的网络栈。

 

示例:bridge模式

宿主机将会创建一块虚拟网卡,网卡工作模式为桥接,默认地址为:172.17.0.1/16

3

以默认网络类型(–net=bridge)运行一个容器test

docker run –name test -it –rm busybox:latest

4

也可从容器外注入配置信息,例如:

docker run –name test  -it –rm –dns 114.114.114.114 –add-host www.wxlinux.com:1.1.1.1 busybox:latest

5

 

2、host模式

让容器使用宿主机的用户空间,和物理机共用一套TCP/IP协议栈、IP地址;拥有完全

的本地主机接口访问权限,可以跟主机其他root进程一样打开低范围端口,还可以让

容器做一些影响整个主机系统的事情,例如重启主机。因此使用此选项时要非常小心。

 

示例:host模式

以host网络类型运行一个容器test

6

docker run –name test –network host -it –rm busybox:latest

7

 

 

3、none模式

让Docker将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己

进行配置

 

示例:none模式

8

 

 

4、container模式

也称为联盟式容器:Joined container

让Docker将新建容器的进程放到一个已存在的容器的网络栈中,新容器进程有自己的文件

系统、进程列表和资源限制,但会和已存在的容器共享IP地址和端口等网络资源,两者进

程可以直接通过lo环回接口通信

 

示例:container模式

启动第一个容器

docker run –name test1 -it -rm busybox

9

启动第二个容器,共享test1容器的网络资源

10

 

 

三、Docker单主机网络配置示例

示例一:修改容器默认网桥地址

自定义docker0桥的网络属性信息:/etc/docker/daemon.json文件

{

            “bip”: “192.168.1.5/24”,

            “fixed-cidr”: “10.20.0.0/16”,

            “fixed-cidr-v6”: “2001:db8::/64”,

            “mtu”: 1500,

            “default-gateway”: “10.20.1.1”,

            “default-gateway-v6”: “2001:db8:abcd::89”,

            “dns”: [“10.20.1.2″,”10.20.1.3”]

        }

核心选项为bip,即bridge ip之意,用于指定docker0桥自身的IP地址;其它选项可通过此地

址计算得出。

11

systemctl restart docker

12

 

示例二:docker远程连接其他docker(默认没开启)

dockerd守护进程的C/S,其默认仅监听Unix SOcket格式的地址,/var/run/docker.sock;

如果使用TCP套接字,

vim /etc/docker/daemon.json

“hosts”: [“tcp://0.0.0.0:2375”, “unix:///var/run/docker.sock”]

也可向dockerd直接传递“-H|–host”选项;

 

示例:

docker主机IP:192.168.30.10

本地镜像列表如下:

13

vim /etc/docker/daemon.json

14

重启docker服务

systemctl restart docker

远程访问IP地址:192.168.30.10的镜像

docker -H 192.168.30.10:2375 image ls

15

 

 

示例三:创建另外一个bridge网络桥

默认docker启动后,自带一个docker0的网桥,地址为172.17.0.1/16

创建一个名称为mybr0,地址为172.26.0.0/16的网桥

docker network create -d bridge –subnet “172.26.0.0/16” –gateway “172.26.0.1” mybr0

16

查看网桥

17

 

 

四、Docker跨主机容器通信介绍

18

隧道方案:

Overlay:一种网络架构上叠加的虚拟化技术模式,其大体框架是对基础网络不进行大

规模修改的条件下,实现应用在网络上的承载,并能与其它网络业务分离,并且以基于

IP的基础网络技术为主。Overlay 技术是在现有的物理网络之上构建一个虚拟网络,上

层应用只与虚拟网络相关。

Docker: 跨主机集群网络解决方案的一种,可以用于连接部署在多台主机上的 Docker

容器,使用网络的应用程序不必去配置端口映射等信息,Weave的通信支持加密,所以

用户可以从一个不受信任的网络连接到主机。

Flannel:一个专为kubernetes定制的三层网络解决方案,主要用于解决容器的跨主机通信

问题。

 

隧道方案优缺点:

优点:对底层的网络没有过高的要求,一般来说,只要是在一个三层可达网络里,就能构建

出一个基于隧道的容器网络。

缺点:随着节点规模的增长复杂度会提升,大规模集群情况下网络问题跟踪复杂

 

路由方案:

Calico:是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个IP,每个 host都是

router,把不同 host 的容器连接起来。与VxLAN不同的是,Calico不对数据包做额外封

装,不需要 NAT 和端口映射,扩展性和性能都很好。

与其他容器网络方案相比,Calico 还有一大优势:network policy。用户可以动态定义 ACL

规则,控制进出容器的数据包,实现业务需求。

MacVLAN:Linux操作系统内核提供的网络虚拟化方案之一,更准确的说法是网卡虚拟化方

案。它可以为一张物理网卡设置多个mac地址,相当于物理网卡施展了影分身之术,由一

个变多个,同时要求物理网卡打开混杂模式。针对每个mac地址,都可以设置IP地址,本

来是一块物理网卡连接到交换机,现在是多块虚拟网卡连接到交换机。

 

路由方案优缺点:

优点:从三层或者两层实现跨主机容器互通,没有NAT,效率比较高,和目前的网络能够融合

在一起,每一个容器都可以像虚拟机一样分配一个业务的IP。

缺点:如果几万新的容器IP冲击到路由表里,导致下层的物理设备没办法承受;而且每一个容

器都分配一个业务IP,业务IP会消耗很快。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/104693

(2)
wangxczwangxcz
上一篇 2018-08-08
下一篇 2018-08-09

相关推荐

  • linux 学习5

    1. RPM包管理 1.1 RPM简介 RPM类似于Windows系统中.exe的软件安装程序,用户可以使用它自行安装和管理Linux上的应用程序和系统工具; RPM软件包文件都是以.rpm为后缀,一般采用这样的命名格式:软件包名称 – 版本号 – 修正版 . 硬件平台 . rpm。 1.2 RPM命令的使用方法 查询:rpm {-q | –query} […

    2018-07-21
  • sed数据流编辑器

    sed(Stream Editor)行编辑器 基础用法

    2018-04-12
  • 描述Linux计算机的组成及其功能

    描述计算机的组成及其功能

    2018-04-16
  • 追梦之路第七周修炼

    追梦之路第七周操作系统启动流程

    2018-08-06
  • 软、硬链接的对比分析

      硬链接与软链接的对比分析 硬链接,即一个文件可以用同一个节点编号却使用多个文件名。这数个文件名之间是平等的关系。 例:我在centos6.9的虚拟机上创建了一个文件f1(touch f1),然后以f1文件为旧文件建立一个名为f1.1的硬链接,再以文件f1.1创建一个名为f1.2的硬链接。接着我在f1文件中写入内容,如下图所示,三个文件中内容是一…

    2018-04-07
  • 手把手系列(二)教你搭建自己的yum源服务器

    通过yum安装程序包最重要的一步就是指定yum仓库,今天我来教大家如何搭建自己的yum源服务器。

    2018-04-20