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 19:57
下一篇 2018-08-09 00:27

相关推荐

  • 变量

    变量 echo $name 与 echo “$name” 假如变量是读取文件,前者会自动缩进成一行,后者保留原有格式 (umask=022,mkdir /f1)括号相当于开启一个临时子进程,能读取当前shall的变量等信息,但是进程号不变,命令结束后恢复刚才状态 局部变量,环境变量,只读变量(常量),位置变量,数组 局部变量:只在当前…

    Linux笔记 2018-04-15
  • 网络基础

    网络基础

    2018-05-01
  • RHEL7.2搭建yum源

    我在RHEL7.2搭建本地yum时发现突然报错了。 查看了一下报错信息显示 加载插件:langpacks,产品ID,搜索禁用回购,订阅管理器该系统未注册到红帽订阅管。你可以使用subscription-m急于注册.repolist:0由于Redhat的yum在线更新是收费的,如果没有注册的话是不能使用的,即不能在线安装软件。 我只好用CentOS的yum来替…

    2018-04-19
  • 第二周作业

    第二周

    Linux笔记 2018-05-20
  • 文本处理三剑客:sed简介

    文本处理三剑客:sed简介 sed是一种流编辑器,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。 处理过程 sed命令将当前处理的行读入模式空间(pattern space)进行处理,sed在该行上执…

    Linux笔记 2018-04-03
  • 如何在虚拟机上安装centos6系统

    VMware Workstation  是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,以及可便于携带的虚拟机器,  下图以VMware14.1.1版本为例: 第一步打开VMware并选择创建新的虚拟机。 第二步此处我们选择典型配置,并开始下一步 第三步选择稍后安装操作系统并开始下一步 第四步:选择liux操作系统,版本号…

    2018-03-29