.artifact的子命令是自Podman 5.4版起才有功能。昨天介紹的.image並沒有registry的功能,是由.artifact補足,概念上更接近k8s的標準。.artifact管的不是一般runnable container image,而是OCI Artifact。
在OCI出現之前,是Docker主導了容器市場,但隨後出現了其他競爭技術(如 CoreOS 的 rkt),導致市場面臨格式分裂的風險。所以成立了OCI(Open Container Initiative,開放容器倡議)來解決這個問題,其主要作用包括:
藉由OCI三大核心標準規格看待完Podman Quadlet完整的生態如下:
Quadlet
│
┌─────────────────┼─────────────────┐
│ │ │
Image類 Runtime類 Distribution類
│ │ │
│ │ │
.image .container .volume
.build .pod .network
.artifact .kube
截至昨天發文所走向的路徑是:
.build
↓
Build image
.image
↓
Pull image
↓
.container
↓
Run container
就是從包版到佈署再到維運的流程。
而.artifact卻是走管理流程,路徑如下:
Registry
↓
.artifact
↓
OCI artifact store
所以目標不是產出Container,而是管理符合OCI規格的資源,除了Container Image,以下資源類型均能註冊到OCI artifact store:
熟悉Maven的也知道Repositoy的主角不一定jar檔,像pom、so(Share Object)等各種型式的檔案也能被Maven Repository管理。Registry在podman的定位如同Repository在Maven的定位。