Docker与Linux Bridge:不容错过的互联技术 (docker linux bridge)

在如今的云计算时代,Docker已经成为了一个不可或缺的容器技术。Docker的高效性和灵活性使得它成为了局域网内部署和管理的首选技术之一。同时,Linux Bridge也是一个非常重要的技术,它是一个网络设备,用于将多个网络接口连接起来,形成一个二层的虚拟网络交换机。本文将会探讨如何结合这两种技术,来实现高效率的容器化系统管理。

Docker简介

Docker是一个非常流行的容器平台,它能够将一个应用和所有的相关依赖项打包成一个可移植的容器。由于Docker完全独立且可移植,因此它提供了一种相对容易的方法来部署和管理应用程序。

Docker的另一个强大的功能是它的映像管理体系。Docker镜像能够轻松地被重复使用,并且由于它们是独立的,所以在不同的环境中可以轻松地部署。使用Docker的好处之一是它提供了一个轻松的方式来管理应用程序,不需要考虑应用程序之间的依赖关系和环境问题。

Linux Bridge简介

Linux Bridge是Linux下的一个虚拟网络设备,它是一个二层网络设备,可以将来自物理网络接口、虚拟接口和其他网络设备的数据包转发到目标设备。它能够连接多个虚拟和物理网络接口,从而为虚拟机提供更多的灵活性和可用性。

Linux Bridge不仅能够连接虚拟机,还可以连接不同的物理设备,例如网卡、路由器、交换机等。这使得Linux Bridge成为了一个非常强大的网络设备,可以为大型企业提供高度可扩展的网络解决方案。

Docker和Linux Bridge的结合

Docker容器可以使用虚拟网络接口,可以在容器中运行虚拟机,并将虚拟网卡通过Linux Bridge连接到物理网络接口中。这样,容器可以与物理网络上的其他设备进行通信。

介绍了Docker和Linux Bridge的基本概念,接下来将会讨论如何结合这两种技术,来实现高效率的容器化系统管理。

之一步:创建Linux Bridge

首先需要创建一个Linux Bridge,在Linux系统上,创建Linux Bridge的最简单方法是使用iproute2工具。以创建名为”br0″的Linux Bridge为例,执行以下命令:

sudo ip link add name br0 type bridge

现在已经在Linux系统上创建了一个Linux Bridge。接下来需要将它连接到现有的网络接口中。

第二步:连接Linux Bridge

将创建的Linux Bridge连接到网络接口是通过将网络接口添加到Linux Bridge中来完成的。可以使用以下命令将一个现有的网络接口添加到Linux Bridge中:

sudo ip link set eth0 master br0

其中,eth0是要添加到Linux Bridge中的网络接口的名称。现在,eth0已经连接到名为”br0″的Linux Bridge中。

第三步:创建Docker容器

接下来需要在Linux Bridge之上创建Docker容器。如前所述,Docker容器可以在虚拟网络接口上运行,可以使用-L选项来指定虚拟网络接口的名称,例如:

sudo docker run -it –rm –name mycontner –network mybridge busybox

其中,-L选项指定了虚拟网络接口的名称为”mybridge”。运行Docker容器后,可以通过Linux Bridge实现容器与其他设备的连接。

第四步:连接Docker容器

连接Docker容器到Linux Bridge非常简单,只需运行以下命令:

sudo docker network connect mybridge mycontner

其中,mybridge是Linux Bridge的名称,mycontner是要连接到Linux Bridge的Docker容器的名称。

结合Docker和Linux Bridge可以实现高效率的容器化系统管理。Docker的灵活性和Linux Bridge的高度可扩展性使得这两种技术相互补充,从而提高了容器化系统的效率和可靠性。通过创建Linux Bridge并将它连接到现有的网络接口中,可以在Linux Bridge之上创建Docker容器,并将它们连接到Linux Bridge中,从而实现容器与其他设备的连接。

相关问题拓展阅读:

如何创建docker network

熟悉 Linux 技术的人都知道,容器只是利用名字空间进行隔离的进程而已,Docker 在容器实现上也是利用了 Linux 自身的技术。

有时候,我们需要在宿主机上对容器内进行一些操作,当然,这种绕过 Docker 的操作方式并不推荐。

如果你使用的是比较新的 Docker 版本,会尴尬的发现,直接使用系统命令,会无法访问到容器名字空睁租间。

这里,首先介绍下逗 ip netns地 系列命令。这些命令负责操作系统中的网络名字空间。

首先,我们使用 逗add地 命令创建一个临时的网络名字空间。

ip netns add test

然后,使用 show 命令来查看系统中的网络名字空间,会看到刚创建的 test 名字空间。

ip netns show test

另外,一个很有用的命令是 exec,会在对应名字空间内执行命令。例如

ip netns exec test ifconfig

使用 del 命令删除刚创建的 test 名字空间。

ip netns del test

接下来运行一个 Docker 容器,例如

docker run -it ubuntu

再次执行 ip netns show命令。很遗憾,这里什么输出都没有。

原因在于,Docker 启动容器后仍然会以进程号创建新的名字空间,但在较新的版本里面,默认删除了系统中的名字空间信息文件。

网络名字空间文件位于 /var/run/netns 下面,比如我们之前创建的 test 名字空间,则在让巧这个目录下有一个 test 文件。诸如 netns 类似的系统命令依靠这些文件才能获得名字空间的信息。

在容器启动后,查看这个目录,会发现什么都没有。

OK,那让我们手动重建它。

首先,使用下面的命令查看容器进程信息,比如这里的1234。

docker inspect –format='{{. State.Pid}} ‘ container_id 1234

接下来,在 /proc 目录(保存进程的所有相关信息)下,把对应的网络名字空间文件链接到悉滑兆 /var/run/netns 下面

ln -s /proc/1234/ns/net /var/run/netns/

然后,就可以通过正常的系统命令来查看或访问容器的名字空间了。例如

ip netns show 1234 ip netns exec 1234 ifconfig eth0 172.16.0.10/16…

使用docker network create命令来创建,只能创建docker内建的网络模式

使用docker plugin,创建自定义网络

使用docker命令创建网络

Docker中轮塌内置的网络模式包括如下几种:

bridge 我们基于该网络模式创建了mynet网络

host 本地网络模式

macvlan 这个模式貌似是最森谨新加的

null 无网络

overlay 用于此桐基swarm集群中容器的跨主机网络访问

docker create network命令包含以下参数:

Flag shorthand -h has been deprecated, please use –help

Usage: docker network create NETWORK

Create a network

Options:

–attachableEnable manual container attachment

–aux-address mapAuxiliary IPv4 or IPv6 addresses used by Network driver (default map)

-d, –driver stringDriver to manage the Network (default “bridge”)

–gateway stringSlice IPv4 or IPv6 Gateway for the master subnet

–help Print usage

–internal Restrict external access to the network

–ip-range stringSlice Allocate container ip from a sub-range

–ipam-driver string IP Address Management Driver (default “default”)

–ipam-opt mapSet IPAM driver specific options (default map)

–ipv Enable IPv6 networking

–label listSet metadata on a network (default )

-o, –opt map Set driver specific options (default map)

–subnet stringSlice Subnet in CIDR format that represents a network segment

创建overlay模式的全局网络,我们可以看到新创建的mynet1的scope是swarm,即集群范围可见的。

172.18.0.1:root@sz-pg-oam-docker-test-001:/root># docker network create -d overlay mynet1

x81fu4ohqot2ufbpoa2u8vyx3

172.18.0.1:root@sz-pg-oam-docker-test-001:/root># docker network ls

NETWORK IDNAME DRIVERSCOPE

ad3023f6dbridgebridgelocal

346c0fecrane_defaultbridgelocal

4da289d8e48adocker_gwbridge bridgelocal

3d636dff00dahost host local

tx49ev228p5lingressoverlayswarm

x81fu4ohqotmynet overlayswarm

cc14eenone null local

172.18.0.1:root@sz-pg-oam-docker-test-001:/root># docker network inspect mynet1

{

“Name”: “mynet1”,

“Id”: “x81fu4ohqot2ufbpoa2u8vyx3”,

“Created”: “T00:00:00Z”,

“Scope”: “swarm”,

“Driver”: “overlay”,

“EnableIPv6”: false,

“IPAM”: {

“Driver”: “default”,

“Options”: null,

“Config”:

},

“Internal”: false,

“Attachable”: false,

“Containers”: null,

“Options”: {

“com.docker.network.driver.overlay.vxlanid_list”: “4097”

},

“Labels”: null

}

>

注意,overlay模式的网络只能在swarm的manager节点上创建,如果在work节点上创建overlay网络会报错:

172.18.0.1:root@sz-pg-oam-docker-test-002:/root># docker network create -d overlay mynet1

Error response from daemon: Cannot create a multi-host network from a worker node. Please create the network from a manager node.

如果不使用-d指定driver将默认创建本地bridge网络。

自定义网络

创建自定义网络需要设置网络的driver和ipam。

docker 和 k8s 面试总结

花了大半个月对k8s&docker进行了梳理,包括之前读过的书,官方文档以及k&d在公司项目的实践等。

以下是个人对docker & k8s 面试知识点的总结:

1 docker

常见面试题如下 每一点可根据回答进行适当深入

1.1 什么是docker

docker和传统linux的差异?

容器和镜像的区别?

如何理解docker的缓存机制?

1.2 docker 网络模型是什么?有何局限

docker的网络基础是什么?

docker的网络模型是?有什么局限?

docker如何实现容器间通信的?

1.3 docker 基础命令

cmd和entryPoint差异?

copy和add的差异?

简单讲下swam/compose?

2 kubernetes

常见面试题如下 每一点可根据回答进行适当深入

2.1 什么是k8s?

1 为什么用k8s 解决了什么问题?

2 k8s有哪些组件,有什么作用?【同:Master节点和Node节点都用哪些组件】

3 可以简单说下Node Pod container 之间的关系吗? 【可引入2.2/2.3对Pod SVC的考察】

4 什么是SVC可以简单描述下吗?【可引入2.3对SVC的考察】

5 可以简单讲下k8s的网络模型吗?

6 Pod SVC Node Container 之间如何相互访问

7 swarm和k8s如何选择?

2.2 考察Pod

静态Pod和普通Pod的差异?

简单讲下Pod的生命周期重启策略呢?

– 不同组件对Pod的重启策略要求一样吗?

如何检查Pod的健康状态?哪2种探针?

– 2种探针的实现方式

简单说下Pod的调度方式?

2.3 考察SVC

SVC有哪4种类型

2.4 k8s网络模型

DNS和Iptables在k8s中的运用?有何差异

– k8s如何解决多机器部署容器的网络问题?

Pod SVC Node Container 之间如何相互访问

3 参考答案

答案是根据所在公司项目结合自己的理解给出的答案 不一定完全准确但在面试中要做到有理有据突出自己的思路即可。

4 docker

问题和答案 如下

4.1 什么是docker?

通常问这个问题主要在于考察候选人是否真正了解过docker,很多人项目中都有用到docker,真正去了解过概念,架构的不多。从而来辨别简历上的熟悉/了解docker的水分。

如果这个都无法回答,那么接下来的docker考察也就毫无意义了,此问题通常也会结合以下问题来进行考察。

docker和传统linux的差异?

docker都有哪些核心组件?

可以简单说下docker的架构吗?

容器和镜像的区别?

docker是什么:  Docker是一个可以把开发的应用程序自动部署到容器的开源引擎。

docker和VM差异:  docker是一个应用层的抽象,容器之间通过网络命名空间进行隔离,多个容器共享同一个操作系统内核。VM是对物理硬件层的抽象,每个VM都包含独立的操作系统,重且启动缓慢。VM主要为了提供系统环境,容器主要是为了提供应用环境。

docker组件:  docker引擎【包含Docker客户端&服务端】,docker镜像,docker容器,Registry【镜像仓库】

docker的架构:  C/s架构

容器和镜像的区别:  镜像是一个只读模板,包括运行容器所需的数据,其内容在构建之后就不会被改变,可以用来创建新的容器。 镜像由多个只读层组成,容器在只读层的基础上多了一个读写层。

4.2 docker 网络模型是什么?有何局限

这里也经常会结合K8s网络原理进行考察,以及如下几个考点

docker的网络基础是什么?

docker的网络模型是?有什么局限?

docker如何实现容器间通信的?

Docker网络基础:  Docker是在操作系统层上对应用的抽象,使用网络命名空间来对不同容器之间进行网络隔离,用Veth设备对来进行容器之间的通讯。

docker的网络模型:  有4种网络模型 分别是Bridge Container host none 默认使用bridge网络模型,容器的初次启动会虚拟化出来一个新的网卡名为docker0,在多机器部署下docker0地址可能会冲突。所以docker对多机部署支持的不够友好。

4.3 docker 基础命令

出现频率较高的为以下几条命令的考察

cmd和entry差异?

copy和add的差异?

docker-compose & docker swarm?

CMD & ENTRYPONIT

都是容器操作指令:

CMD 用于指定容器启动时候默认执行的命令。可以被docker run指定的启动命令覆盖。ENTRYPONIT 指令可让容器以应用程序或者服务的形式运行。一般不会被docker run指定的启动命令覆盖。dockerfile中的多个CMD & ENTRYPONIT只有最后一个会生效。

注意区别docker run 和RUN 一个是容器启动命令,一个是镜像构建时候所用。

copy & add

ADD & COPY 选取目标文件复制到镜像当中。是针对镜像的指令,唯一差别在于add源文件可以支持url且可以对压缩文件进行解压操作。而copy针对的是当前构建环境。

docker-compose & docker swarm

使用Docker compose可以用YAML文件来定义一组需要启动的容器,以及容器运行时的属性。docker-compose用来对这一组容器进行操作。

docker swarm 原生的Docker集群管理工具,依赖docker本身,很多重要功能依赖团队二次开发。且社区不够活跃,一般公司生产环境会选择k8s,个人项目或者容器数量较少可选swarm,只需要docker即可完成,相对较轻。

5 kubernetes

5.1 什么是k8s?

对k8s的考察一般逃不过这样入门级的问题,针对入门级的问题,面试官可能也会针对如下几个点进行考察,在候选人答出来的基础上,选择其中一个进行深入。

为什么用k8s 解决了什么问题?

k8s有哪些组件,有什么作用?

可以简单说下Node Pod container 之间的关系吗? 【进一步可对Pod SVC细节进行考察】

什么是SVC可以简单描述下吗?【可引对SVC的考察】

可以简单讲下k8s的网络模型吗?【可以和docker网络模型结合考察】

Pod SVC Node Container 之间如何相互访问【衍生 外部环境如何访问k8s】

swarm和k8s如何选择?

1 什么是k8s 为什么用k8s:

一个开源的容器集群管理平台【容器编排工具】,可提供容器集群的自动部署,扩缩容,维护等功能。分为管理节点Master和工作节点Node。在我们的项目中主要解决了环境一致性的问题,通过CI/CD使得运维部署变得简单起来,以及自动部署,故障监控,自动扩缩容。可以提升开发效率。

2 k8s有那些组件:

etcd保存了整个集群的状态;

apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;

controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;

scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;

kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;

Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);

kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

3 Node&Pod&container之间的关系:Node一般指工作节点包含多个Pod Pod中包含多个Container,Pod中的container共享同一个网络命名空间。

4 什么是SVC: SVC是对一组功能相似的Pod资源的抽象,相当于一组服务的负载均衡。

5 k8s的网络模型:IP-Per-Pod 每个Pod有独立的Ip地址,无论是否处于同一个Node节点,Pod可以通过IP相互访问,且Pod和容器的地址和外部看到的地址是同一个地址。

6 Pod SVC Node Container 之间如何相互访问:

同Pod内的容器:同一个Pod的容器共享同一个网络命名空间可以直接进行通讯

同Node内不同Pod的容器:多个Pod都关联在同一个Docker0网桥上,通过docker0网桥完成相互通讯。

不同Node内Pod的容器:不同Node上的docker0可能会相同,PodIP和docker0是同网段的,所以需要将PodIP和NodeIP进行关联且保障唯一,不同Pod之间的数据通过物理机的端口进行转发即可完成通讯。

7: k8s 和docker swarm如何选择:  :

5.2 对SVC的考察

SVC是k8s中的核心概念 这里涉及知识点众多 常见的面试考点如下

什么是SVC? 如何创建SVC?

使用SVC创建多个副本和使用RC创建多个副本有什么差异?

SVC有哪几种类型?

SVC 负载分发策略有那些?

集群外如何访问SVC?

SVC: 是对一组功能相似的Pod资源的抽象,相当于一组服务的负载均衡。可以使用配置文件的方式创建也可以使用命令创建kubectl expose

SVC和RC提供服务的差距:  RC创建的服务PodIP可能会变。SVC提供的clusterIP不会。通过Iptables的NAT转换重定向到本地端口,在均衡到后端Pod。

svc的几种类型:  ClusterIp/NodePort/LoadBalancer/ExternalName

ClusterIp 默认类型 分配的一个虚拟地址,内部可以相互访问,外部不行

NodePort 将SVC端口号映射到物理机

LoadBalancer 基于NodePort,云服务商在外部创建了一个负载均衡到Pod

ExternalName 将外部地址经过集群内部的再一次封装(实际上就是集群DNS服务器将CNAME解析到了外部地址上),实现了集群内部访问即可。

svc负载分发策略:  RoundRobin/SessionAffinity/自定义实现【基于标签选择器】

集群外部访问:  端口映射到物理机即可

5.2 Pod考察

Pod和静态Pod的区别

生命周期和重启策略 【这里可扩展 不同控制器对Pod的重启策略要求】

Pod如何健康检查?

Pod的调度方式?【扩展调度算法】

Pod如何扩缩容?【扩展 RC和RS的差异】

答案

待补充 –详见 《k8s权威指南》读书笔记

5.3 基础原理类考察

主要考察对基本组件的理解 和原理分析

API Server

Controller Manager【Replication Controller/Node Controller/ResourceQuota Controller/Namespace Controller/SVC Controller& Endpoint Controller】

Scheduler

Kubelet 【Pod健康检查 资源监控】

Kube-Proxy

k8s-DNS & Iptables差异

k8s中Ingress是什么

简述k8s中的如下属性及其作用resources tolerations affinity

k8s中pod、rs、deployment、hpa的基本概念,以及他们之间的关系

答案

待补充 –详见 《k8s权威指南》读书笔记

5.4 网络原理类考察

主要考察对基本组件的理解 和原理分析

k8s的网络模型是什么?

Docker的网络基础是什么?

Docker的网络模型和局限?

k8s的网络组件之间是如何通讯的?

外部如何访问k8s集群?

有那些开源组件支持k8s网络模型?

关于docker linux bridge的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Docker与Linux Bridge:不容错过的互联技术 (docker linux bridge)