Docker并不是全部
自从docker加入了镜像仓库,引爆了容器技术,很多人认为docker就代表了容器的全部。这种观点很普遍,主要是由于docker实在是太火了。即使k8s二次官宣抛弃docker,它的热度依然不减。 其实,现阶段,docker只是众多容器技术中的其中一种。它有三个主要的概念。- 镜像 代表了最终的软件包,不可变的软件载体。相当于安装文件
- 容器 镜像的运行时,实际运行的实例,具有明确的进程号
- 仓库 存放镜像的仓库,可以进行统一的版本管理和权限管理
- docker 平常操作docker,使用的就是docker命令,它就是命令行接口,相当于一个客户端。它将指令发送到dockerd
- dockerd docker的服务端。比如在Linux上安装docker,就要启动一个常驻进程,才能管理所有的docker进程
- containerd 这个组件,是从Docker1.11版本才有的,是从dockerd里拆出来的,是容器标准化后的产物。它遵循的是OCI标准,这个标准后面还会用图来说明它的位置。containerd功能齐全,换句话说,服务器上可以没有dockerd,只需要containerd就能运行容器
- runc 容器运行时组件,是一个标准的OCI容器实现运行时,可用来直接创建和运行容器。可以看到containerd和runc都是OCI的实现,区别是前者是管理工具,后者是运行容器
- containerd-shim 垫片的意思,主要是将containerd与真正的容器进行解耦
- ctr 也叫做containerd-ctr,是containerd的客户端