使用 Umoci 和 Skopeo 修改容器镜像的流程

615 阅读2分钟

以下是使用 UmociSkopeo 修改容器镜像的完整流程,包括下载镜像、解包、修改、重新打包,以及将修改后的镜像加载或推送到目标平台。


工具安装

1. 安装 Umoci

Umoci 是一个灵活的工具,用于解包、修改和重新打包 OCI 容器镜像。通过以下步骤完成安装:

wget https://github.com/opencontainers/umoci/releases/download/v0.4.7/umoci.amd64
chmod +x umoci.amd64
sudo mv umoci.amd64 /usr/local/bin/umoci
umoci --version

运行 umoci --version 检查安装结果。

2. 安装 Skopeo

Skopeo 用于管理容器镜像,例如从镜像仓库复制镜像到本地或推送镜像到远程。以下命令安装 Skopeo:

echo "deb [signed-by=/usr/share/keyrings/libcontainers-archive-keyring.gpg] https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/ /" | sudo tee /etc/apt/sources.list.d/libcontainers.list
curl -fsSL https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_20.04/Release.key | gpg --dearmor | sudo tee /usr/share/keyrings/libcontainers-archive-keyring.gpg > /dev/null
sudo apt update
sudo apt install skopeo -y

镜像操作流程

1. 下载镜像到本地

使用 Skopeo 从 Docker Hub 下载 Ubuntu 镜像,并以 OCI 格式保存到本地:

skopeo copy docker://ubuntu oci:ubuntu-oci:latest

此命令将镜像存储在当前目录的 ubuntu-oci 文件夹中,包含镜像层和配置。

2. 复制镜像目录

复制镜像目录,避免直接修改原始数据:

cp -r ubuntu-oci ubuntu-oci-modified
3. 解包镜像

使用 Umoci 解包镜像内容,提取出可修改的文件系统:

umoci unpack --image ubuntu-oci-modified:latest --rootless test

此命令将在当前目录创建一个名为 test 的文件夹,其中包含镜像的文件系统(位于 rootfs 子目录)和元数据。

4. 修改文件系统

进入解包后的文件系统目录,根据需要进行修改。例如,创建一个新目录:

mkdir test/rootfs/test

在该步骤中,可添加或删除文件,安装依赖,或执行其他自定义操作。

5. 重新打包镜像

完成修改后,使用 Umoci 将修改后的内容重新打包成镜像:

umoci repack --image ubuntu-oci-modified:latest test
6. 验证镜像

通过以下命令验证修改后的镜像:

umoci inspect --image ubuntu-oci-modified:latest

镜像发布或加载

导出为 Docker 兼容格式并加载

将修改后的镜像导出为 Docker 兼容格式,并加载到本地 Docker:

umoci raw --export docker-archive ubuntu-oci-modified.tar ubuntu-oci-modified:latest
docker load < ubuntu-oci-modified.tar
推送到镜像仓库

使用 Skopeo 将镜像推送到远程仓库:

skopeo copy oci:ubuntu-oci-modified:latest docker://my-registry/my-image:tag

my-registry 替换为镜像仓库地址,my-image:tag 替换为目标镜像名称和版本。


Umoci 和 Skopeo 提供了强大的工具链,用于解包、修改和重新打包容器镜像,满足定制化需求。通过上述流程,可轻松完成容器镜像的操作,并将修改后的镜像部署到本地或远程环境。