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