docker原理

一、前言

    说docker的底层原理,就需要知道容器是怎么来的,容器所使用到的技术主要是namespace、cgroup、rootfs,还有镜像的联合文件系统(unionFS)下面我们就来详细了解一下容器用到的这三大技术

二、详解

namesapce

容器的创建是通过linux命名空间实现的,容器,其实是一种特殊的进程,在使用容器的时候,实际上还是在当前主机上创建一个应用进程,只不过在创建这些进程时,Docker 为它们加上了各种各样的 Namespace 参数,从而使得在同一系统上运行的进程之间能够拥有各自独立的视图和隔离的环境,因为是宿主机上的进程,所以多个容器之间使用的还是同一个宿主机的内核

Docker 使用了六种不同类型的 namespaces 来实现容器的资源隔离

PID Namespace(进程ID命名空间)

NET Namespace(网络命名空间)

IPC Namespace(进程间通信命名空间)

MNT Namespace(挂载命名空间)

UTS Namespace(UNIX时间共享命名空间)

User Namespace(用户命名空间)

cgroup

控制组(Cgroups)是Linux内核提供的一种资源管理机制,用于限制和管理进程组的资源消耗。docker利用Cgroups来限制容器对CPU、内存、磁盘等资源的使用

rootfs

rootfs用来为容器提供隔离后的执行环境文件系统,提供了容器运行所需的所有文件和目录,Docker 使用联合文件系统(Union File System)来构建和管理容器的 rootfs

unionFS

联合文件系统(UnionFS)是一种文件系统服务,它可以将多个目录合并为一个目录。这些目录称为“层”(layers),每一层可以读写或只读。Docker 镜像是由多层文件系统组成的,每一层表示一次文件系统的变更(如添加、修改或删除文件),镜像的底层层称为基础镜像,通常是一个最小化的操作系统,比如 Ubuntu、Alpine 等。每个镜像层都包含了其之前所有层的内容,并叠加当前层的变化

当 Docker 容器运行时,Docker 会在镜像的基础上创建一个可写层(writeable layer),称为容器层(container layer)。容器层位于镜像层之上,所有对文件系统的写操作都会在这个层进行,该层级的更改、写入、删除,不会对底下的只读层造成影响,就比如在容器中进行修改了某文件,将该容器删除,在创建后又是一个新的容器,所以可写成的操作不会影响只读层,当然容器层是临时的,但是为了持久化数据,可以使用数据卷(Volumes)

应该如何去理解这个联合文件的层级呢,就拿dockerfile文件来说,dockerfile中的每一条指令都是一个只读层,例如FROM、RUN、WORKDIR、CMD等,其中FROM是基础镜像层,镜像的层级数量对启动快慢也会造成影响,所以在写dockerfile的时候就会尽量将命令都写在一个层级中,以减少层级的数量

镜像分层的最大优点是可以资源共享,如果多个容器使用的都是相同的基础镜像,那么宿主机只需在磁盘上保存一份基础镜像即可;同时内存中也只需要加载一份基础镜像,就可以为多个容器提供服务,并且镜像的每一层都是可以被共享的,例如下载了mysql镜像,再下载nginx镜像,里面如果有相同的层级的话,下载nginx镜像的时候就不会再下载这个层

三、docker默认网络

docker默认用的网络模式是网桥(brige)模式,接下来说一下该模式的工作原理

网桥模式是一种网络配置方式,它通过一个虚拟网桥将多个网络接口连接在一起,使它们可以在同一个局域网(LAN)中通信。在 Docker 中,默认的网桥名为 docker0,所有使用默认网络模式的容器都会连接到这个网桥

当 Docker 安装后,会自动创建一个名为 docker0 的虚拟网桥,并为其分配一个子网(通常是 172.17.0.0/16)。当启动一个新容器时,Docker 会为该容器创建一个虚拟以太网对(veth pair),一个接口连接到容器内,另一个接口连接到 docker0 网桥。通过这个网桥,容器可以与其他同样连接到 docker0 网桥的容器通信

容器网络配置过程

1.创建虚拟以太网对

Docker 创建一个 veth pair,一个端点(如 veth0)放在容器内,另一个端点(如 veth1)放在主机上

2.将 veth 连接到网桥

将主机端的 veth 接口(veth1)连接到 docker0 网桥

3.分配 IP 地址

Docker 从 docker0 网桥所在的子网中分配一个 IP 地址给容器内的接口eth0

4.配置路由

在容器内配置默认路由,使所有的出站流量通过 eth0

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值