skopeo使用
2023-10-09
skopeo 命令
1. skopeo 命令安装
1.1 centos7 安装skopeo
yum install skopeo -y
1.2 ubuntu 安装skopeo
# Ubuntu 20.10 and newer
sudo apt-get -y update
sudo apt-get -y install skopeo
# Ubuntu 20.04
. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install skopeo
1.3 二进制下载地址
curl -fL "https://pixiupkg-generic.pkg.coding.net/pixiu/k8stoolsdefault/skopeo?version=latest" -o skopeo
2. skopeo 使用
2.1 拉取镜像
skopeo copy docker://<源镜像> dir:<目标目录>
# 案例
skopeo copy docker://nginx:latest dir:/tmp/nginx
skopeo 拉取镜像并打成 tar包
# 案例
skopeo copy docker://nginx:latest docker-archive:/tmp/nginx.tar
- 拉取 名为 nginx的最新镜像,并存储至 /tmp/nginx 目录中
- 拉取名为nginx的最新镜像,并保存 为 /tmp/nginx.tar
- --src-creds="用户名:密码"
2.2 推送镜像
skopeo copy dir:<源目录> docker://<目标镜像>
# 案例
skopeo copy dir:/tmp/nginx docker://shujiangle/nginx:latest
- 将 /tmp/nginx 目录中的镜像推送到 远程 目录为shujiangle 的docker镜像仓库,并命名为 “nginx:latest"
2.3 转换镜像,并推送
skopeo copy docker://<源镜像> docker://<目标镜像>
# 案例
skopeo copy docker://docker.io/nginx:latest docker://quay.io/myrepo/nginx:latest
- 将从 Docker Hub 拉取名为 "nginx" 的最新版本镜像,并将其推送到 quay.io 上名myrepo的镜像仓库
2.4 skopeo 不指定https 推送
skopeo copy --src-tls-verify=false --dest-tls-verify=false docker://docker.io/nginx:latest docker://quay.io/myrepo/nginx:latest
- Skopeo 命令中使用 HTTP 连接而不是 HTTPS,请使用 --src-tls-verify=false 和 --dest-tls-verify=false 参数禁用 TLS 连接的验证
2.5 skopeo 推送tar包至镜像仓库
skopeo copy --dest-tls-verify=false docker-archive:/path/to/local.tar docker://<registry>/<image>:<tag>
- /path/to/local.tar 是本地 Tar 包的路径。
- 是目标镜像仓库的地址。
- 是要创建的镜像名称。
- 是要为镜像设置的标签。
- --dest-tls-verify 参数禁用 TLS 连接的验证
3. skopeo policy 设置
cat > policy.json <<\EOF
{
"default": [
{
"type": "insecureAcceptAnything"
}
],
"transports":
{
"docker-daemon":
{
"": [{"type":"insecureAcceptAnything"}]
}
}
}
EOF
- skopeo 中使用的时候,需要设置 --policy=policy.json
4. 批量推送镜像到镜像仓库脚本
#!/bin/bash
# 设置镜像仓库地址和凭据(如果需要认证)
registry="192.168.17.28:58001"
username="admin"
password="admin123"
# 获取当前时间
current_time=$(date +"%T")
# 获取push镜像名
imagename=$()
for i in $(ls *tar|sort -h)
do
basename=$(basename "$i" .tar)
# 获取镜像名
imagename=${basename%%_*}
# 获取镜像版本
imagetag=${basename#*_}
echo -e "\e[34m当前时间: $current_time\e[0m 正在推送 $registry/k8simage/$imagename:$imagetag 镜像............."
skopeo copy --policy=policy.json --src-tls-verify=false --dest-tls-verify=false --dest-creds="$username:$password" docker-archive:"$i" "docker://$registry/k8simage/$imagename:$imagetag"
if [ $? -eq 0 ]; then
echo -e "\e[33m成功推送 $registry/k8simage/$imagename:$imagetag 镜像\e[0m"
else
echo -e "\e[31m推送 $registry/k8simage/$imagename:$imagetag 到镜像仓库失败\e[0m"
fi
done