1 容器于镜像
操作系统中的进程
- 进程可见,可以相互通信
- 共享一份文件系统
- 高级别进程可以破坏低级别进程
- 进程资源冲突
- 应用会抢占资源
- 资源隔离(视图级别)- namespace。资源隔离
- 独立的文件系统 chroot
- 控制资源使用率 - cgroup。限制资源使用
容器
容器是一个视图隔离,资源可控制,独立文件系统的进程集合。
- 视图隔离:可以看见部分进程;独立主机名
- 控制资源使用率。如2G内存,CPU使用个数等
- 容器是进程的集合,可以系统资源隔离。拥有独立视图和文件系统。
- 只需要容器运行的依赖都具备了,容器就可以运行起来了。这些资源称之为镜像
镜像
运行容器所需要的文件集合-容器镜像
Dockerfile - 描述镜像构建步骤
构建步骤产生的文件系统的变化-changeset
- 类似于disk snapshot
- 镜像可以相互复用
- 提高文件复用率,减少磁盘压力和空间
如何构建镜像
build出来的docker镜像都放在镜像仓库里面。
如何运行容器
1. 从镜像仓库下载
2. 查看本地镜像
3. 选择镜像,并运行
要对镜像指定进程名,例子里是top命令。可以多次docker run来运行多个进程。
小结
容器:和系统其他部分隔离开的进程集合
镜像:容器所需的所有文件集合- 一次构建,多次运行
容器的生命周期
单进程模型
- 容器init进程生命周期=容器生命周期
- 运行期间课运行docker exec执行运维操作
数据持久化
- redis等的数据持久化独立于容器的生命周期。
- 数据持久化到数据卷-docker volume 。数据卷的生命周期和容器生命周期是独立的。
容器项目架构 moby容器引擎架构
containerd
- 容器运行时管理引擎,独立于moby daemon
- containerd-shim管理容器生命周期,可以被containerd动态接管,通过插件的形式管理
容器运行时
- 容器虚拟化技术
- runC,kata,gVisor
容器 VS VM
- VM是通过hypervisor模拟硬件资源,需要guest os。每个os拥有完整的内核
- 应用拥有guest os所有资源
- 隔离效果很好,但是要消耗很多资源。虚拟化消耗了很多资源。
- 容器基于进程。无需guest os,只需独立文件系统。进程级别隔离
- 启动时间更快
- 隔离消耗资源少 - 隔离效果弱于VM