如何在 Docker HUB 中發布針對不同架構所建置的 Docker 映像?

如何在 Docker HUB 中發布針對不同架構所建置的 Docker 映像?

我有一個構建在其之上的容器Debian:傑西(有一些 openssl 編譯和一些自訂的東西)。我希望我的形像是可發射的在不同的體系結構上,例如在「普通」x86_64 作業系統上,但也在基於 ARM 的體系結構(如 RaspberryPI)上。

我發現當我在 x86_64 上建立映像並將其發佈到 HUB 上時,在 ARM 裝置上拉取時它不起作用,反之亦然。嘗試這樣做會導致一些“找不到某些庫”或“無法識別的命令”錯誤。

問題是:如何建置和發布我的映像,以便它可用於其他架構(而且,重要的是 - 如何告訴 docker 在下載時自動選擇合適的映像)?

我理解了debian 容器「已被移植」到不同的架構但我找不到任何關於如何為我的圖像實現此目的的資訊。

答案1

Docker 中的多架構映像正在積極開發中。其中的關鍵部分是一個docker manifestcli本 PR 中仍在開發中

您首先需要為不同的體系結構建立映像,這些映像始終可以直接在適當的體系結構系統上運作。多架構圖像是指向這些圖像的「清單清單」。當您拉取多架構映像時,docker 用戶端將從該清單中拉取適當的映像。

直到上面的 PR 整合到 Docker 中,你就可以使用清單工具它允許您定義清單清單並將其推送到註冊表伺服器。這允許輸入 yaml 文件,如下例所示:

image: myprivreg:5000/someimage:latest
manifests:
  -
    image: myprivreg:5000/someimage:ppc64le
    platform:
      architecture: ppc64le
      os: linux
  -
    image: myprivreg:5000/someimage:amd64
    platform:
      architecture: amd64
      features:
        - sse
      os: linux

然後,您執行以下命令以獲取上述 yaml 檔案並將其轉換為清單列表,並將其推送到定義的註冊表:

./manifest-tool push from-spec someimage.yaml

答案2

  1. 根據相關建築的形象建構您的形象。
    • 例如:arm32v7/debian:jessie代替debian:jessie
  2. 將其標記為其他內容。
    • 例如:fracz/fooapp:arm32-latest, fracz/fooapp:raspi-latest,fracz/fooapp:grandma-use-this-one
  3. 想要運行您的映像的人負責選擇適當的標籤。
    • 儘管您可能想在文件/自述文件/等中添加一些相關信息

相關內容