自动拉取和推送docker镜像到私有仓库(skopeo)

1、相关资源导航

2、环境介绍 操作系统:Centos 7.9 docker版本:20.10.17 私有仓库:harbor 工具:shell、skopeo

3、安装skopeo (1)下载源码包

wget https://github.com/containers/skopeo/archive/refs/tags/v1.9.2.tar.gz
tar -xvf v1.9.2.tar.gz

(2)安装go-md2man并获取程序目录

rpm -ivh https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/g/golang-github-cpuguy83-go-md2man-1.0.4-5.el7.x86_64.rpm
whereis go-md2man

(3)进入skopeo目录,进行容器编译

docker run -v  $PWD:/src -v /usr/bin/go-md2man:/go/bin/go-md2man -w /src -e CGO_ENABLED=0 golang make BUILDTAGS=containers_image_openpgp GO_DYN_FLAGS=

(4)运行skopeo执行文件

bin/skopeo -v

(5)移动软件目录到/usr/local下,并创建bin文件软连接

mv skopeo-1.9.2/ /usr/local/skopeo
ln -s /usr/local/skopeo/bin/skopeo /usr/local/bin/skopeo

) (6)编译后的bin文件分享 编译未成功的可以试试这个

4、skopeo命令

skopeo login --tls-verify=false -u xxx -p xxx harbor.wtown.com

推送一个镜像

skopeo copy --insecure-policy --src-tls-verify=false --dest-tls-verify=false docker://docker.io/mysql:8.0.30-oracle docker://harbor.wtown.com/wtown/mysql:8.0.30-oracle

仓库中已有 5、创建同步脚本

vi /usr/local/bin/autoimagesync

添加如下(更换私有仓库信息)

set -e

input_info=$1
source_image_name=`echo $input_info | awk -F : { print $1  }`
destination_image_name=`echo $input_info | awk -F : { print $1  }  | awk  -F / { print $NF  }`
image_tag=`echo $input_info | awk -F : { print $2  }`

if [ ! -n "$image_tag" ]; then
   echo "未输入TAG,使用默认latest"
   image_tag=latest
else
   echo TAG是$image_tag
fi

#定义私有仓库信息
harbor_registry=harbor.wtown.com
project=wtown
user=xxx
password=xxx

echo "登陆私有仓库..."
skopeo login --tls-verify=false -u ${user} -p ${password} ${harbor_registry}
if [[ $? -eq 0 ]] ;then
        echo "登陆成功成功!!!"
fi

echo "开始同步镜像..."
skopeo copy --insecure-policy --src-tls-verify=false --dest-tls-verify=false docker://docker.io/${source_image_name}:${image_tag} docker://${harbor_registry}/${project}/${destination_image_name}:${image_tag}
if [[ $? -eq 0 ]] ;then
        echo "镜像同步成功!!!"
fi

添加执行权限

chmod +x /usr/local/bin/autoimagesync

测试如下

经验分享 程序员 微信小程序 职场和发展