貔貅云原生

貔貅云原生

skopeo使用

169
0
0
2023-10-09
skopeo使用

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