如何基于ContainerD运行时构建运行中容器的镜像?
如何基于ContainerD运行时构建运行中容器的镜像?
嘿,刚好我之前在GCP的K8s集群里用ContainerD做过类似的操作,导出运行中容器的镜像其实挺简单的,我给你一步步拆解:
第一步:登录到目标K8s节点
你可以通过GCP的gcloud工具直接SSH到节点,命令是:gcloud compute ssh <你的节点名称>或者直接在GCP控制台找到对应节点,点击SSH按钮登录也行。
第二步:定位要导出的容器
ContainerD配套的工具是crictl,用它列出节点上所有运行中的容器:crictl ps从输出里找到你要处理的容器,记下它的
CONTAINER ID(短ID就够用)。第三步:导出容器为文件系统快照包
用crictl export命令把容器的当前状态打包成tar文件:crictl export my-container-snapshot.tar <容器ID>执行完后,当前目录就会生成这个tar包,它包含了容器运行时的所有文件和修改。
第四步:(可选)将快照包转为可复用的镜像并推送仓库
如果需要把这个快照变成可以重复使用的镜像,或者推送到镜像仓库(比如GCR),可以用ContainerD的另一个工具ctr:- 先导入快照包为本地镜像:
ctr images import my-container-snapshot.tar - 给镜像打上符合仓库要求的标签:
ctr images tag <导入后的镜像名> gcr.io/你的项目ID/镜像名:标签 - 最后推送到镜像仓库(记得先配置好仓库认证,GCR的话可以用
gcloud auth configure-docker):ctr images push gcr.io/你的项目ID/镜像名:标签
- 先导入快照包为本地镜像:
一些小提醒:
- GCP的Container-Optimized OS节点默认已经预装了
crictl和ctr,不用额外安装。 - 如果没有节点操作权限,得先找集群管理员开通权限哦。
- 导出的tar包是容器实例的快照,和原始镜像的区别是它包含了容器运行后的所有修改,导入后可以当作新镜像使用。
备注:内容来源于stack exchange,提问作者Thiago Gabriel Leite Ferreira
相关产品推荐
相关产品推荐

