docker02:docker核心技术探索网络命名空间和网络隔离(代码片段)

coe2coe coe2coe     2022-11-03     112

关键词:

在Docker中可以为Docker容器创建与原始宿主系统以及其它容器中的虚拟系统之间相互隔离的虚拟网络环境。

Docker的网络分为以下几种模式:

(1)bridge模式。这将配置一个虚拟网络系统,容器中的虚拟网卡通过NAT与宿主系统的真实网卡通讯。

docker run -it  --net=bridge --name=centos --hostname=centos  centos  /bin/bash

在容器中执行以下命令,其中yum provides用于查找指定的命令所在的包。

1  yum provides ifconfig
2 
3 yum install net-tools
4 
5 yum provides ip
6 
7 yum install iproute

检查容器中的网络配置:

 1 [[email protected] /]# ip link list
 2 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
 3     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 4 15: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT 
 5     link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
 6 [[email protected] /]# ip addr  
 7 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
 8     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 9     inet 127.0.0.1/8 scope host lo
10        valid_lft forever preferred_lft forever
11 15: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
12     link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
13     inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
14        valid_lft forever preferred_lft forever
15 [[email protected] /]# ifconfig
16 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
17         inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
18         ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
19         RX packets 8324  bytes 27792451 (26.5 MiB)
20         RX errors 0  dropped 0  overruns 0  frame 0
21         TX packets 6506  bytes 356889 (348.5 KiB)
22         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
23 
24 lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
25         inet 127.0.0.1  netmask 255.0.0.0
26         loop  txqueuelen 1  (Local Loopback)
27         RX packets 0  bytes 0 (0.0 B)
28         RX errors 0  dropped 0  overruns 0  frame 0
29         TX packets 0  bytes 0 (0.0 B)
30         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

(2)container模式。这将使得容器的虚拟网卡使用与指定的其它容器的虚拟网卡相同的IP地址。

为了理解这种模式,需要先创建一个容器,网络模式为bridge模式。

docker run -it  --net=bridge --name=centos --hostname=centos  centos  /bin/bash

然后查看bridge模式下的网络配置:

 1 [[email protected] /]# ifconfig
 2 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 3         inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
 4         ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
 5         RX packets 1552  bytes 14029219 (13.3 MiB)
 6         RX errors 0  dropped 0  overruns 0  frame 0
 7         TX packets 1519  bytes 85477 (83.4 KiB)
 8         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 9 
10 lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
11         inet 127.0.0.1  netmask 255.0.0.0
12         loop  txqueuelen 1  (Local Loopback)
13         RX packets 0  bytes 0 (0.0 B)
14         RX errors 0  dropped 0  overruns 0  frame 0
15         TX packets 0  bytes 0 (0.0 B)
16         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

 

再创建网络为container模式的容器。

docker run -it --net=container:centos --name=centos2  centos /bin/bash

此时centos2容器和centos容器具备相同的网络配置,包括IP地址,MAC地址以及hostname等信息都相同,这也是container模式下不能指定--hostname=XXXX的参数的原因。

 1 [[email protected] /]# ifconfig
 2 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 3         inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
 4         ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
 5         RX packets 4092  bytes 28111521 (26.8 MiB)
 6         RX errors 0  dropped 0  overruns 0  frame 0
 7         TX packets 3956  bytes 220458 (215.2 KiB)
 8         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 9 
10 lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
11         inet 127.0.0.1  netmask 255.0.0.0
12         loop  txqueuelen 1  (Local Loopback)
13         RX packets 0  bytes 0 (0.0 B)
14         RX errors 0  dropped 0  overruns 0  frame 0
15         TX packets 0  bytes 0 (0.0 B)
16         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

 

(3)host模式。这将使得容器的虚拟网卡使用和宿主系统的真实网卡相同的网络环境,即直接使用宿主系统的物理网卡。

docker run -it --rm --net=host --name=centos2 --hostname=centos  centos  /bin/bash

查看容器的网卡情况:

 1 [[email protected] /]# ifconfig
 2 docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
 3         inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
 4         inet6 fe80::42:ffff:fed9:4b28  prefixlen 64  scopeid 0x20<link>
 5         ether 02:42:ff:d9:4b:28  txqueuelen 0  (Ethernet)
 6         RX packets 6506  bytes 265805 (259.5 KiB)
 7         RX errors 0  dropped 0  overruns 0  frame 0
 8         TX packets 8324  bytes 27792451 (26.5 MiB)
 9         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
10 
11 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
12         inet 11.1.1.11  netmask 255.255.255.0  broadcast 11.1.1.255
13         inet6 fe80::20c:29ff:fe66:d822  prefixlen 64  scopeid 0x20<link>
14         ether 00:0c:29:66:d8:22  txqueuelen 1000  (Ethernet)
15         RX packets 12671  bytes 1064839 (1.0 MiB)
16         RX errors 0  dropped 0  overruns 0  frame 0
17         TX packets 8803  bytes 3356079 (3.2 MiB)
18         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
19 
20 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
21         inet 11.2.1.11  netmask 255.255.255.0  broadcast 11.2.1.255
22         inet6 fe80::20c:29ff:fe66:d82c  prefixlen 64  scopeid 0x20<link>
23         ether 00:0c:29:66:d8:2c  txqueuelen 1000  (Ethernet)
24         RX packets 29604  bytes 42907671 (40.9 MiB)
25         RX errors 0  dropped 0  overruns 0  frame 0
26         TX packets 9761  bytes 597994 (583.9 KiB)
27         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
28 
29 lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
30         inet 127.0.0.1  netmask 255.0.0.0
31         inet6 ::1  prefixlen 128  scopeid 0x10<host>
32         loop  txqueuelen 1  (Local Loopback)
33         RX packets 3765  bytes 2003876 (1.9 MiB)
34         RX errors 0  dropped 0  overruns 0  frame 0
35         TX packets 3765  bytes 2003876 (1.9 MiB)
36         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

(4)none模式。这将使得容器中暂时不具备网卡相关功能。

这种模式下,由于没有网卡,无法进行涉及到网络的操作,包括yum install命令。

 docker run -it --net=none --name=centos3 --hostname=centos centos /bin/bash

 

本博客将对Docker使用的bridge模式的虚拟网络进行模拟。Docker的bridge模式的虚拟网络

 

docker02:docker核心技术探索分层联合文件系统(代码片段)

众多周知,Docker容器的文件系统可以由Linux的各种分层联合文件系统提供底层支撑,这种分层联合文件系统通常在一些处于低层的只读文件系统之上叠加一个处于高层的可读写文件系统。下面结合Docker的镜像和容器的相关概念,... 查看详情

17.docker技术入门与实战---核心实现技术

第17章 核心实现技术17.1 基本架构 1.服务端 1.dockerd 2.docker-proxy 3.containerd 4.containerd-shim 2.客户端 3.镜像仓库17.2 命名空间 1.进程命名空间 2.IPC命名空间 同一个IPC命名空间内的进程可以彼此互相看见,允许进行交互;不同... 查看详情

17.docker技术入门与实战---核心实现技术

第17章 核心实现技术17.1 基本架构 1.服务端 1.dockerd 2.docker-proxy 3.containerd 4.containerd-shim 2.客户端 3.镜像仓库17.2 命名空间 1.进程命名空间 2.IPC命名空间 同一个IPC命名空间内的进程可以彼此互相看见,允许进行交互;不同... 查看详情

docker网络原理详解02(代码片段)

Docker网络网络基础Docker使用到的与Linux网络有关的技术分别有:网络名称空间、Veth、Iptables、网桥、路由网络名称空间为了支持网络协议栈的多个实例,Linux在网络协议栈中引入了网络名称空间(NetworkNamespace),这些独... 查看详情

docker学习路线

docker学习路线参考资料知乎docker的学习路线Docker—从入门到实践Docker核心技术与实现原理Docker入门《KubernetesinAction》,想要学习Kubernetes的读者一定不要错过。编程能力影响最大的两本书就是:《计算机程序的构造和解释》(Struc... 查看详情

docker核心技术导图分享

docker核心技术导图650)this.width=650;"src="https://s3.51cto.com/wyfs02/M02/8F/27/wKioL1jVA42SukEDAAVDVaNOOkk546.png"title="docker核心技术详解之一初级使用.png"alt="wKioL1jVA42SukEDAAVDVaNOOkk546.png"/>本文出自“kali-linux”博客 查看详情

docker核心技术与实现原理(代码片段)

...理)>>> 到虚拟化技术,我们首先想到的一定是Docker,经过四年的快速发展Docker已经成为了很多公司的标配,也不再是一个只能在开发阶段使用的玩具了。作为在生产环境中广泛应用的产品,Docker有着非常成熟的社区以... 查看详情

docker学习笔记docker容器相关技术

Docker学习笔记(三)Docker容器相关技术 轻量级虚拟化技术命名空间:namespace,隔离系统资源,进程、网络、文件系统等隔离控制组:cgroups,为容器技术而生,分配资源,用来限制、记录、隔离进程资源使用。 命名空间... 查看详情

docker镜像命名解析

镜像是Docker最核心的技术之一,也是应用发布的标准格式。无论你是用dockerpullimage,或者是在Dockerfile里面写FROMimage,从Docker官方Registry下载镜像应该是Docker操作里面最频繁的动作之一了。我们需要先了解下docker镜像是如何命名的... 查看详情

docker命名空间控制组及联合文件系统概念

基本架构命名空间控制组联合文件系统 docker底层依赖的核心技术主要包括操作系统的命名空间(Namespace)、控制组(ControlGroups)、联合文件系统(UnionFileSystems)和linux虚拟网络支持。 基本架构docker采用标准的c/s架构,... 查看详情

云计算核心技术docker教程:docker使用网桥网络

...网桥可以是在主机内核中运行的硬件设备或软件设备。就Docker而言,网桥网络使用软件网桥,该软件网桥允许连接到同一网桥网络的容器进行通信,同时提供与未连接到该网桥网络的容器的隔离。Docker网桥驱动程序会自动在主机... 查看详情

虚拟化容器docker核心技术实战视频课程

===============课程目录===============├─(1)01Docker_前提知识要求和课程简介.avi├─(2)02__Docker_为什么会出现.avi├─(3)03Docker_理念.avi├─(4)04Docker_是什么.avi├─(5)05__Docker_能干什么.avi├─(6)06Docker_三要素.avi├─(7)07Docker_CentOS6安装Do 查看详情

“深入浅出”来解读docker网络核心原理(代码片段)

...之前笔者写了有些关于dokcer的各种相关技术的文章,唯独Docker网络这一块没有具体的来分享。后期笔者会陆续更新Docker集群以及Docker高级实践的文章,所以在此之前必须要和大家一起来解读一下Docker网络原理。认真看下去你会有... 查看详情

云原生训练营模块三docker核心技术(代码片段)

Docker核心技术1、系统架构2、DockerDocker概念安装Docker容器操作六大子系统关于namespace的常用操作Cgroups文件系统网络模型理解构建上下文(BuildContext)BuildCacheDockerfile常用指令Docker镜像管理课后练习1、系统架构微服务改造&#... 查看详情

docker

目录 1.1????容器引擎核心技术????11.2????特性????1 1.3????说明????1 1.4????部署????2 1.5????操作????2 1.6????DockerImage制作????5 1.7????DockerImage发布????7 1.8????容器端口映射????8 ?容器引擎核心技术Namespace:实现Container的进程、网络、 查看详情

docker:docker核心技术预览

开始学习docker了,想写一篇docker技术介绍的纯理论文章,发现以下网站的文档写的特别好,就直接引用了,文章转载自:http://www.infoq.com/cn/DockerDeephttp://www.infoq.com/cn/articles/docker-core-technology-preview?utm_source=articles_about_DockerDeep& 查看详情

docker——核心实现技术(代码片段)

作为一种容器虚拟化技术,Docker深度应用了操作系统的多项底层支持技术。早期版本的Docker是基于已经成熟的LinuxContainer(LXC)技术实现的。自从0.9版本起,Docker逐渐从LXC转移到新的libcontainer上,并积极推动开放容器规则runc,试... 查看详情

[docker]02centos安装docker(包含失败),安装命令简介,以及docker核心概念(代码片段)

主要内容:  一、安装docker(包含卸载重新安装)  二、配置docker服务  三、安装命令简介  四、docker核心概念 一、安装docker 1.1. 通过uname-r查看系统版本,为什么要查看系统版本呢?因为docke... 查看详情