Docker容器技术原理
chroot

什么是busybox?
什么是chroot呢?



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

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

Namespace
Namespace对内核资源进行隔离,使得容器中的进程都可以在单独的命名空间中运行
并且只可以访问当前容器命名空间的资源
Namespace可以隔离进程ID,主机名,用户ID,文件名,网络访问,进程间通信等相关资源。
分类


Namespace主要包括上面几种分类:
mnt namespace:隔离挂载点,例如 /mnt/data 的不同挂载内容。
net namespace:隔离网络,例如宿主机的 eth0 在容器内不可见。
pid namespace:隔离进程ID,例如容器内 PID 1 是自己的 bash。
ipc namespace:隔离 IPC 资源,例如共享内存段在容器内外不可见。
uts namespace:隔离主机名,例如容器内主机名可以是 newhost,宿主机不变。
查看主机上的namespace

验证mnt namespace


然后我们看我的主机

可以看到没有那些东西
验证pid namespace


验证UTS Namespace

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

验证ipc namespace



宿主机

验证User Namespace



宿主机

验证Net Namespace


宿主机

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

cgroups 核心概念




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

Docker架构
Docker服务端
dockerd(服务端进程)负责响应客户端的请求,然后将客户端请求转换为Docker的各种具体的操作
Docker重要组件
containerd: 通过containerd-shim启动并管理runC
runC: 用来运行容器的轻量级工具,是真正用来运行容器的

Dockerfile


Docker容器的生命周期
容器和镜像的区别
容器是基于镜像创建的可运行实例,并且单独存在一个镜像可以创建出多个容器

容器
生命周期

初建
运行
停止
暂停
删除


自建镜像仓库
https://yeasy.gitbook.io/docker_practice/repository/registry
