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

相关推荐

  • Linux的命令机制

    Linux的命令机制 命令格式 COMMAND [OPTIONS…] [ARGUMENTS…]选项:用于启用或关闭命令的某个或某些功能短选项:-c 例如:-l, -h长选项:–word 例如:–all, –human-readable参数:命令的作用对象: 比如文件名和作用名 注意 1. *多个选项…

    Linux笔记 2018-04-01
  • 新建虚拟机+安装Centos7

    一、基本环境 笔记本电脑:widows 7 虚拟机版本:vmware workstation 12 镜像版本:CentOS-7-x86_64-Everything-1804 下载地址:mirrors.aliyun.com www.centos.org 一、新建虚拟机 1.创建虚拟机 2.选择“典型”,点击下一步。 3.选择“稍后安装系统”,点击下一步。 4.…

    2018-07-22
  • 从文本处理到脚本编辑

    文本处理工具grep 文本搜索工具,根据用户指定的“模式” 对目标文本逐行进行匹配检查,打印匹配到的行.-o 仅显示匹配到的字符串-v 显示不被模式匹配到的行-n 显示匹配的行数-c 统计匹配的行数-i 忽略字符大小写-q 静默模式,不输出任何信息-A# 后#行-B# 前#行-C# 前后各#行-e 实现多个选项间的逻辑or关系 grep -e ‘…

    Linux笔记 2018-04-24
  • boot

    把boot目录都删除了怎么办 文件的 关键 缺少 唯独缺少 grub.conf     ;创建这个文件 以上是boot下文件都删除了的补救法 下面是第二种方法 光盘启动,救援模式   ,用安装包的方式 不能安装在当前的跟下 grub-install安装grub相关信息 写 以上是boot是独立分区

    2018-05-13
  • DNS搭建

    DNS:domain name service ,协议(c/s,53/udp,53/tcp dns协议的实现 udp:user datagram protocol,无连接协议 top level domain:顶级域名(tld) 主dns服务器:维护负责解析的域内解析库服务器:解析库有管理员维护 从dns服务器:从主dns服务器或者其它dns服务器上复制(区…

    2018-06-11
  • Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示

    文件管理工具:cp,mv,rm cp:命令:copy:复制文件的数据    源文件;目标文件       单源复制 cp [OPTION]… [-T] SOURCE DEST   如果DEST不存在,则事先创建此文件,并复制原文件的数据流至DEST中:   如果DEST存在:        如果DEST是非目录文件:则覆盖目标文件        …

    Linux笔记 2018-05-20