skopeo 是一个命令行工具,可对容器镜像和容器存储进行操作。 在没有dockerd的环境下,使用 skopeo 操作镜像是非常方便的。
安装
包管理器
其他系统见 安装文档
编译安装
使用
在使用 skopeo 之前,我们首先要知道在命令行中镜像的格式
需要注意的是,这几种镜像的名字,对应着镜像存在的方式,不同存在的方式对镜像的 layer 处理的方式也不一样,比如 docker:// 这种方式是存在 registry 上的,docker-daemon: 是存在本地 docker pull 下来的,再比如 docker-archive 是通过 docker save 出来的镜像。同一个镜像有这几种存在的方式就像水有气体、液体、固体一样。可以这样去理解,他们表述的都是同一个镜像,只不过是存在的方式不一样而已。
| IMAGE NAMES | example |
|---|---|
| containers-storage: | containers-storage: |
| dir: | dir:/PATH |
| docker:// | docker://k8s.gcr.io/kube-apiserver:v1.17.5 |
| docker-daemon: | docker-daemon:alpine:latest |
| docker-archive: | docker-archive:alpine.tar (docker save) |
| oci: | oci:alpine:latest |
命令选项
可以看到 skopeo 的功能很简单:
copy:复制一个镜像从 A 到 B,这里的 A 和 B 可以为本地 docker 镜像或者 registry 上的镜像。inspect:查看一个镜像的 manifest 火车 image config 详细信息delete:删除一个镜像,可以是本地 docker 镜像或者 registry 上的镜像list-tags:列出一个 registry 上某个镜像的所有 taglogin:登录到某个 registry,和 docker login 类似logout: 退出已经登录到某个 registry 的 auth 信息,和 docker logout 类似manifest-digest、standalone-sign、standalone-verify这三个用的不多sync:同步一个镜像从 A 到 B,感觉和 copy 一样,但 sync 支持的参数更多,功能更强大
获取镜像的信息
skopeo 可以在不用下载镜像的情况下,获取镜像信息
docker://: 是使用 Docker Registry HTTP API V2 进行连接远端docker.io: 远程仓库centos: 镜像名称
也可以获取本地dockerd的镜像信息
docker-daemon: docker守护镜像的镜像ubuntu:latest: 本地镜像的名称
拷贝镜像
注意一下,这里的 location 就是指的上面提到的 IMAGE NAMES ,也就是说 skopeo copy src dest 可以有 6*6=36 种组合!比如我可以将一个镜像从一个 registry 复制到另一个 registry,skopeo copy docker://IMAGE_NAME docker://IMAGE_NAME,再强调一遍,一定要注意 IMAGE_NAME 的命名的格式。
在不使用 docker 的情况下从远端下载镜像
--insecure-policy: 用于忽略安全策略配置文件docker://nginx:1.17.6: 该命令将会直接通过 http 下载目标镜像docker-archive: 存储为 /tmp/nginx.tar,此文件可以直接通过 docker load 命令导入
相应的,可以将下载的文件导入到本地
也可以将镜像下载到指定目录
或者从指定目录导入到本地
其他命令
删除镜像
认证文件
认证文件默认存放在 $HOME/.docker/config.json
文件内容