in container

Skopeo: 管理 Container 映像檔及倉庫的方式

前言

現行看倌們使用 Container Images 預設應該都是直接從 Docker Hub 直接拉下來做使用,那對於完全處於 Offline 環境的企業當中,勢必要建立一個 Container Images Repository Mirror (類似於 Yum/Apt repository mirror) 站供內部環境使用,而後則會延伸 Day 2 Operation 要如何管理這些 Images 或者是 Repository

簡介 Skopeo

Skopeo 就是一套 OpenSource 的工具可以協助管理跟操作 Container Images & Repository,可與 Docker / CRI-O 做協作,且不需要任何 Daemon即可管理或審視 Container Images 內部的資訊

現有的常見功能有:

  • Copy Images
    常見情境就是我要如何將 Docker Hub 上的特定 Images 循正確的做法推送到自家的 Repository (e.g. Quay),Skopeo 就是專門在解決這件事

  • Inspecting a repository
    Skopeo 可以遠端或本地抓某一個 Container Images 的 Metadata 回來看,效果類同於 docker inspect,好處是你不用真的把每一個 Images 都拉回來看內容

  • Delete Images
    是的,可以遠端砍用不到的 Images,但我相信如果你有完整的 Repository 方案,這個功能應該比較少用就是了

Day 2 Operation 探討

1. 如何從 Docker Hub 複製 Images 到自家的倉庫去?

skopeo copy docker://docker.io/library/nginx docker://quay.pichuang.local/pichuang/nginx --dest-creds pichuang:<password or token>

Copying blob sha256:802b00ed6f79f48e6a5f44ecbcaf43563d6077aaecb565eee1dfc615c0b18c00
 21.44 MB / 21.44 MB [=====================================================] 20s
Copying blob sha256:e9d0e0ea682bf3ccff3215d4fd1f577403b7d6ca05a9ea34a85fde6eda92e7b6
 21.16 MB / 21.16 MB [=====================================================] 14s
Copying blob sha256:d8b7092b92215f6d5ed0a1c78928bb0b8e651948b15b30b71983bfb267725c72
 204 B / 204 B [============================================================] 5s
Copying config sha256:06144b2878448774e55577ae7d66b5f43a87c2e44322b3884e4e6c70d070b262
 5.88 KB / 5.88 KB [========================================================] 5s
Writing manifest to image destination
Writing manifest to image destination
Storing signatures

很簡單吧! 非常直觀地解釋,從 Docker Hub 複製 library/nginx 至需登入的私人倉庫 quay.pichuang.localpichuang/nginx 裡面去

2. 如何從 Docker Hub 複製 Private Images 到自家的倉庫去?

加個 --src-creds 就好

skopeo copy docker://docker.io/pichuang/secret docker://quay.pichuang.local/pichuang/secret --src-creds pichuang:<password or token> --dest-creds pichuang:<password or token>

3. 如何從 Local 複製到某個 Repos 去?

skopeo copy docker-daemon:<image name>:<tag> docker://quay.pichuang.local/<username>/<image name>:latest --dest-creds pichuang:<password or token>

4. 如何審視 (Inspect) Image Metadata?

skopeo inspect docker://docker.io/library/nginx

{
    "Name": "docker.io/library/nginx",
    "Digest": "sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3",
    "RepoTags": [
        "1-alpine-perl",
        "1-alpine",
        "1-perl",
        "1.10-alpine",
        "1.10.0-alpine",
        "1.10.0",
...
}

5. 複製這件事沒有 Skopeo 之前是怎麼做的?

把 localhost 當作暫存點,上 tag 後轉送出去

docker pull docker.io/library/nginx
docker tag docker.io/library/nginx quay.pichuang.local/pichuang/nginx
docker push quay.pichuang.local/pichuang/nginx

References