Docker容器技术原理

chroot

image-20250413165156355

什么是busybox?

image-20250413165214011

什么是chroot呢?

image-20250413165333296

image-20250413165556743

image-20250413170817267

用 chroot 仅仅隔离了文件系统根目录,但没有隔离其他资源,因此还不能称之为一个完整的容器

image-20250413170955652

想实现容器,我们还需要Linux内核的其他特性

image-20250413171151535

Namespace

Namespace对内核资源进行隔离,使得容器中的进程都可以在单独的命名空间中运行

并且只可以访问当前容器命名空间的资源

Namespace可以隔离进程ID,主机名,用户ID,文件名,网络访问,进程间通信等相关资源。

分类

image-20250413183804642

image-20250413171422796

Namespace主要包括上面几种分类:

mnt namespace:隔离挂载点,例如 /mnt/data 的不同挂载内容。

net namespace:隔离网络,例如宿主机的 eth0 在容器内不可见。

pid namespace:隔离进程ID,例如容器内 PID 1 是自己的 bash。

ipc namespace:隔离 IPC 资源,例如共享内存段在容器内外不可见。

uts namespace:隔离主机名,例如容器内主机名可以是 newhost,宿主机不变。

查看主机上的namespace

image-20250413184554022

验证mnt namespace

image-20250413184401826

image-20250413184430262

然后我们看我的主机

image-20250413184450134

可以看到没有那些东西

验证pid namespace

image-20250413185213186image-20250413185522898

验证UTS Namespace

image-20250413185932477

可以看到主机的名字没有被修改

image-20250413190129692

验证ipc namespace

image-20250413190205599

image-20250413193513428

image-20250413193458255

宿主机

image-20250413193343767

验证User Namespace

image-20250413193634007

image-20250413193725681

image-20250413193747220

宿主机

image-20250413193757911

验证Net Namespace

image-20250413193827559

image-20250413193940604

宿主机

image-20250413193937235

Cgroup

Cgroup是一种LINUX内核功能,可以限制和隔离进程的资源使用情况(CPU,内存,磁盘I/O,网络等)

image-20250413194612562

cgroups 核心概念

image-20250413194628141

image-20250413194646268

image-20250413194650908

image-20250413194703985

UnionFS

UnionFS是一种通过创建文件层进程操作的文件系统,常用的联合文件系统有AUFS,Overlay和Devicemapper等

容器镜像仓库

image-20250413173107758

Docker架构

Docker服务端

dockerd(服务端进程)负责响应客户端的请求,然后将客户端请求转换为Docker的各种具体的操作

Docker重要组件

containerd: 通过containerd-shim启动并管理runC

runC: 用来运行容器的轻量级工具,是真正用来运行容器的

image-20250413173624938

Dockerfile

image-20250413175511855

image-20250413175520667

Docker容器的生命周期

容器和镜像的区别

容器是基于镜像创建的可运行实例,并且单独存在一个镜像可以创建出多个容器

image-20250413180015037

容器

生命周期

初建

运行

停止

暂停

删除

image-20250413180116117

image-20250413180421446

自建镜像仓库

https://yeasy.gitbook.io/docker_practice/repository/registry