背景
2020 年 12 月初,Kubernetes 在其最新的 Changelog 中宣布,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时。
弃用 Docker 带来的,可能是一系列的改变,包括不限于:
- 容器镜像构建工具
- 容器 CLI
- 容器镜像仓库
- 容器运行时
专题文章《K8S 1.20 弃用 Docker 评估》会从多方面分析由此带来的变动和影响,今天先介绍镜像格式的改变。
Docker 镜像仍然可以使用吗?
是的,可以使用。Docker 较新版本生成的镜像实际上并不是特定于 Docker 的镜像,而是 OCI(Open Container Initiative)镜像。无论你使用什么工具构建镜像,任何符合 OCI 标准的镜像在 Kubernetes 看来都是一样的。containerd 和 CRI-O 都能够提取这些镜像并运行它们。所以您可以仍然使用 Docker 来构建容器镜像,并且可以继续在 containerd 和 CRI-O 上使用。
那为什么发现 Docker 镜像和 Containerd 镜像存在不兼容情况?
具体如下:在 K8S > 1.20 版本中,发现 containerd ctr
上传到镜像仓库的镜像与同版本的 docker 镜像间存在以下问题
- 不能被 docker 使用
- docker push不能覆盖
根本原因还是在于镜像格式的差别。下面做详细解释。
Docker 和 OCI 镜像格式的差别?
目前有以下几种容器镜像格式:
- ❌已弃用:Docker Image V1
- ⚠️已弃用:Docker Image Manifest V2 Schema 1
- Docker Image Manifest V2 Schema 2
- Open Container Initiative (OCI) 规范
Docker V1 镜像
{% note danger %}
❌严重警告:
Docker V1 格式早已弃用,请不要再使用!!!
{% note info %}