K8S 1.20 棄用 Docker 評估之 Docker 和 OCI 映象格式的差別

2023-03-02 12:00:58

背景

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 映象間存在以下問題

  1. 不能被 docker 使用
  2. docker push不能覆蓋

根本原因還是在於映象格式的差別。下面做詳細解釋。

Docker 和 OCI 映象格式的差別?

目前有以下幾種容器映象格式:

Docker V1 映象

{% note danger %}
嚴重警告

Docker V1 格式早已棄用,請不要再使用!!!

{% note info %}