如题。?
说起来,还得是靠docker——对,Docker公司的docker产品。
因为docker是先驱、曾经的事实标准、是集大成着(或比较混杂)。
dockerd + docker 工具 可以完成 容器镜像 image 的直接 save、load,也支持运行的容器container直接打包【本质是Filesystem Hierarchy Standard,FHS合规】的tar包的export、import。
由此,我们可以在现有image或container的基础上,通过docker变相制作自己的image。
即:
contarinerd + ctr ----> dockerd + docker ----> 制作自己的image ----> contarinerd + ctr
需要注意:
k8s 运行在 contarinerd 的【k8s.io】的命名空间内;
docker 运行在 containerd的【moby】的命名空间内;
ctr 或说containerd 运行在 containerd的【default】的命名空间内;
附注1:
docker 的export 与 import 是 将运行的容器container打包成合乎FHS的普通tar包。这个tar包只能通过docker客户端工具使用,与ctr工具的export和import不同! docker的save与load才是将镜像image打包成离线便携的符合OCI规范的tar包并加载的功能。
ctr没有提供自定义镜像的功能!ctr只能通过export、imort功能来导出或加载离线便携的符合OCI规范的tar包。
附注2:
nerdctl 虽然号称兼容docker工具并增强了一些功能。
but
但是
nerdctl 并没有提供制作自定义image的相关功能! 它本质还是和ctr靠齐步的!