Containerd鏡像構建工具以及簡單使用


獲取地址:https://github.com/moby/buildkit/releases

 

BuildKit 由buildkitd守護進程和buildctl客戶端組成。雖然buildctl客戶端可用於 Linux、macOS 和 Windows,但buildkitd守護程序目前僅可用於 Linux。

 

啟動buildkitd守護進程:

您需要buildkitd在主機上以 root 用戶身份運行。(默認前台執行)

$ sudo buildkitd

 

要buildkitd以非 root 用戶身份運行,參考https://github.com/moby/buildkit/blob/master/docs/rootless.md

 

buildkitd 守護進程支持兩個工作后端:OCI (runc) 和 containerd。

默認情況下,使用 OCI (runc) 后端工作。可以設置--oci-worker=false --containerd-worker=true使用 containerd 后端。

 

buildkitd --oci-worker=false --containerd-worker=true & 

 

用systemd管理,參考https://github.com/moby/buildkit#systemd-socket-activation

 

前端是在 BuildKit 中運行並將任何構建定義轉換為 LLB 的組件。有一個名為 gateway ( gateway.v0)的特殊前端,它允許使用任何圖像作為前端。(LLB二進制中間格式)

在開發過程中,Dockerfile 前端 ( dockerfile.v0) 也是 BuildKit 存儲庫的一部分。將來,這將被移出,並且可以使用外部映像構建 Dockerfile。

 

構建一個 Dockerfile buildctl

 

buildctl build \
    --frontend=dockerfile.v0 \
    --local context=. \
    --local dockerfile=.

# or

buildctl build \
    --frontend=dockerfile.v0 \
    --local context=. \
    --local dockerfile=. \
    --opt target=foo \
    --opt build-arg:foo=bar

 

--local 將本地源文件從客戶端公開給構建器(就是特喵的目錄)。

context是 Dockerfile 前端查找構建上下文,比如在從目錄中拷貝文件到鏡像里

Dockerfile 構建文件的位置目錄。

--output 的 name 表示構建的鏡像名稱,鏡像會存在本地containerd的buildkit命名空間下

 

buildkit命名空間在配置文件worker.containerd.namespace,要修改此命名空間, 可以去配置 /etc/buildkit/buildkitd.toml

 

 

顯示本地構建緩存 ( /var/lib/buildkit )

 

如果需要憑據,buildctl將嘗試讀取 Docker 配置文件$DOCKER_CONFIG/config.json。 $DOCKER_CONFIG默認為~/.docker.

 

構建推送到registry

 

buildctl build \
    --frontend=dockerfile.v0 \
    --local context=. \
    --local dockerfile=. \
    --output type=image,name=docker.io/username/image:tag,push=true

 

name=[value]: 圖像名稱
push=true: 創建鏡像后推送
push-by-digest=true: 推送未命名的圖像
registry.insecure=true: 推送到不安全的 HTTP 注冊中心
oci-mediatypes=true: 在配置 JSON 中使用 OCI 媒體類型而不是 Docker 的
unpack=true:創建后解壓鏡像(用於containerd)
dangling-name-prefix=[value]: 用 命名圖像prefix@<digest>,用於匿名圖像
name-canonical=true: 添加額外的規范名稱 name@<digest>
compression=[uncompressed,gzip,estargz,zstd]: 為新創建和緩存的圖層選擇壓縮類型,gzip 為默認值。esargz 應與oci-mediatypes=true.
force-compression=true:強制將compression選項應用於所有圖層(包括已經存在的圖層)。
buildinfo=[all,imageconfig,metadata,none]:選擇要導出的構建依賴版本(默認all)。

 

使用緩存構建鏡像並推送到registry

 

inline: 將緩存嵌入到鏡像中,一起推送到注冊表中

registry: 分別推送鏡像和緩存

local: 導出到本地目錄

gha: 導出到 GitHub Actions 緩存

 

buildctl build \
    --frontend=dockerfile.v0 \
    --local context=. \
    --local dockerfile=. \
    --output type=image,name=docker.io/username/image:tag,push=true
    --export-cache type=inline

 

將緩存一起推送到registryregistry需要type才能導入緩存,應該指定--export-cache type=inline--import-cache type=registry,ref=docker.io/username/image要將緩存導出到本地目錄,應該指定--export-cache type=local

 

--export-cache 選項:

  type=registry
  mode=min (默認):僅導出結果圖像的圖層
  mode=max:導出所有中間步驟的所有層。
  ref=docker.io/user/image:tag: 參考
  oci-mediatypes=true|false: 是否在導出的清單中使用 OCI 媒體類型。由於 BuildKitv0.8默認為 true。

--import-cache 選項:

  type=registry
  ref=docker.io/user/image:tag

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM