17.5 Skopeo - 容器映象管理工具
版本說明:Skopeo 屬於 containers 專案生態。建議訪問 Skopeo 官方倉庫 和 GitHub Releases 獲取最新版本訊息。
本節介紹 Skopeo,包括其基礎概念、應用場景以及基本指令。
17.5.1 Skopeo 簡介
Skopeo 是一個由 Red Hat 贊助開源的指令行工具,它可以在不需要執行容器守護程序(如 Docker Daemon)的前提下,對容器映象進行極其高效的操作和管理,包括:檢查、複製、刪除和簽名等操作。
Skopeo 最大的特點是其可以在『不將映象拉取到本地』的情況下,直接在遠端 Registry(映象倉庫)之間完成檢查和搬運,從而大幅度節省頻寬和磁碟空間。這也是它在容器運維和分發領域非常受歡迎的原因。
17.5.2 核心屬性
- 遠端巡檢:透過
skopeo inspect可以檢視遠端倉庫中映象的元資料(例如包含哪些層、環境變數訊息、入口指令等),而完全無需拉取該映象。 - 映象複製與同步:支援各種格式之間的相互傳輸,如在不同的容器倉庫之間、或者從倉庫拉取到本地的目錄、或者儲存為 OCI 佈局結構等。
- 映象刪除:可以遠端刪除倉庫中的映象(需要擁有許可權)。
- 簽名驗證:支援在分發映象前進行數字簽名以保障安全性。
17.5.3 安裝 Skopeo
類似於 Buildah,Skopeo 也直接包含在大部分主流的 Linux 源中。
在 Fedora/CentOS/RHEL 等發行版中:
$ sudo dnf install -y skopeo
在 Ubuntu/Debian 中:
$ sudo apt-get update
$ sudo apt-get -y install skopeo
如果是 macOS 環境,可以透過 Homebrew 安裝:
$ brew install skopeo
17.5.4 基礎用法範例
1. 遠端檢查映象
有時候我們只想知道遠端映象的詳細訊息,並不想拉取它。下面是檢查 Docker Hub 上的 Alpine 映象的例子:
$ skopeo inspect docker://docker.io/library/alpine:latest
這個指令會回傳一段 JSON 格式的資料,其中包含了諸如映象摘要(Digest)、建立時間、架構(Architecture)、標籤(Tags)等豐富訊息。在自動化的工具和系統審查環境中,這是一個不可或缺的利器。
2. 同步與複製映象
skopeo copy 是使用最為廣泛的指令。它可以在不同的倉庫、不同的格式之間無縫搬運映象。
例如,從一個公共倉庫直接搬運映象到一個私有企業倉庫(無需將其先 docker pull 到本地,再 docker push):
$ skopeo copy docker://docker.io/library/alpine:latest docker://registry.example.com/library/alpine:latest
又或者,你可以將遠端映象拉取到本地,只為了檢查其拆解後的格式,比如將映象解壓到本地某個目錄下以 OCI 規範存放:
$ skopeo copy docker://docker.io/library/alpine:latest oci:alpine-oci
如果我們要將本地的某個目錄下的打包好的映象再次推向 Registry 或轉換為其它儲存型別也是完全支援的,諸如:
docker://遠端 Registrydocker-archive:/docker-daemon:Docker 對應的歸檔檔案或本地守護程序oci:/oci-archive:OCI 相關檔案格式dir:本地純目錄
3. 校驗機制與安全
如果你不信任公開倉庫上的映象,或是需要透過特定的 TLS 證書和鑑權,Skopeo 的功能也是能很好的支援的,比如它可以直接傳遞諸如 --src-creds 或 --dest-tls-verify=false 等引數,這在進行網路隔離的複雜映象搬運操作中常常會用到。
對於複雜的容器環境或那些純粹用於映象資產管理的節點來說,Skopeo 提供了一個直接而強大的資料『搬運工』。