基本实验情况
这里我们拿两台机器部署Harbor镜像仓库
准备的包:
skopeo-linux-amd64
harbor-offline-installer-v2.10.3.tgz
docker-compose-linux-x86_64
docker 版本 1.19-1.20 之间任意 不建议过高 会出现冲突
所以综合上述
我们实验环境为
系统版本:centos7.9 # 如需换源可以去之前的博客或者华为云阿里云进行搜索
docker:1.20.10
skopeo:1.15
harbor:2.10.3
docker-compose:
另外:
武功机器:192.168.0.11 武功机器只能在一个窗口实现走出国门 一般用于拉取我们需求的包和镜像等材料
测试机器
192.168.0.53 对52
192.168.0.41 对51
192.168.0.51
192.168.0.52
两台机器要关闭掉防火墙 和打开路由规则
初始化操作
打开路由、设置规则
机器51.52操作
# 打开中继路由
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 防火墙规则
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n
docker-compose
chmod +x docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 docker-compose
mv docker-compose /usr/bin
docker-compose -v
tar -zxvf harbor-offline-installer-v2.10.3.tgz -C /usr/local/
cd /usr/local/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml # 设置一些参数
mkdir data
chmod 777 data/
./prepare
./install.sh
注意:docker-compose up -d 之后
可以提前把daemon.json的 insecure-registries改为harbor的地址了
这个地址可以是51的地址,也可以是52的仓库地址
skopeo -- 安装
这里的机器 武功机器11 51 52 53
# 由于我们提前下好了 所以就省略了
第一步 安装底层的容器运行时 podman
yum -y install podman
# 注意 这里的安装是centos7.9下完成的
如果你是8的,还是rpm安装的,那就会发生冲突了 所以我们的docker 最好还是用二进制安装
mv skopeo-linux-amd64 skopeo
chmod +x skopeo
mv skopeo /usr/local/bin/
skopeo --version
启动harbor
cd /usr/local/harbor
./prepare
./install
登录仓库
更改测试机器53的daemon.json 把它改为http://192.168.0.51
systemctl daemon-reload
systemctl restart docker
普通的docker登录 注意 登录51的是41机器和 11机器(测试skopeo)
docker login http://192.168.0.51
admin
123.com
skopeo login --tls-verify=false http://192.168.0.51 # 11 机器登录 因为skopeo设计了走门
# --tls-verify 就是不带认证就进来了
admin
123.com
使用武功机器传输一些镜像
# 机器41
docker pull mysql
docker tag mysql:latest 192.168.0.51/jichao-image-project/mysql:test
# 53
docker pull busybox
docker tag busybox:latest 192.168.0.52/jichao-image-bak/busybox:test
skopeo 拉取
# 机器 11 操作
skopeo copy --insecure-policy --src-tls-verify=false --dest-tls-verify=false docker://quay.io/skopeo/stable:latest docker://192.168.0.51/jichao-image-project/skopeo:latest
机器11 同样的命令 ,假如我直接拉到52机器上 能成功吗?
skopeo copy --insecure-policy --src-tls-verify=false --dest-tls-verify=false docker://quay.io/skopeo/stable:latest docker://192.168.0.52/jichao-image-bak/skopeo:latest
答案是不行
# 只要有武功机器就可以去拉取镜像了。
但是你也有有Podman底层 不然的话会报错 如下图
# 这边我就不多拉镜像了 仅作演示
仓库之间可以使用吗?
事实证明 在不认证的仓库之间是可以的
skopeo copy --insecure-policy --src-tls-verify=false --dest-tls-verify=false docker://192.168.0.51/jichao-image-project/mysql:test docker://192.168.0.52/jichao-image-bak/mysql:testone
# 一个机器无法同时登录两个harbor仓库 而想执行这个命令 你的skopeo必须登录目的地址的harbor
也就是说 我从52 机器上 拉镜像到 51上 是可行的
skopeo copy --insecure-policy --src-tls-verify=false --dest-tls-verify=false docker://192.168.0.52/jichao-image-bak/busybox:test docker://192.168.0.51/jichao-image-project/busybox:testone
# 所以 只要你将skopeo 放在目的仓库 并且具有出门功能,你就可以拉取任意镜像
拷贝到本地目录
skopeo copy docker://docker.io/library/nginx:latest dir:skopeo-test
trees skopeo-test
oci模式
skopeo copy docker://docker.io/library/nginx:latest oci:images_OCI
本地文件
skopeo copy --insecure-policy --dest-tls-verify=false docker-daemon:rcoelhorj/go-helloworld:latest docker://192.168.0.51/jichao-image-project/go-helloworld:latest
# 我本地没有这个镜像 有的可以试试 本地的镜像传的很快
skopeo copy --insecure-policy --dest-tls-verify=false docker-daemon:gcr.io/kubebuilder/kube-rbac-proxy:v0.13.0 docker://192.168.0.51/jichao-image-project/kube-rbac-proxy:v0.13.0
skopeo sync
skopeo sync --src docker --dest dir docker.io/library/httpd:latest /root/skopeo-test/httpd
查看公有仓库中busybox的所有版本
skopeo list-tags docker://docker.io/library/busybox
将一个仓库中的同一类像拉到本地
skopeo sync --src docker --dest dir docker.io/library/httpd /root/skopoe-test/httpd
将本地镜像同步到仓库中去
skopeo sync --insecure-policy --dest-tls-verify=false --src dir --dest docker /root/skopeo-test/httpd/httpd:latest 192.168.0.51/jichao-image-project/
两个仓库同步
skopeo sync --insecure-policy --src-tls-verify=false --dest-tls-verify=false --src docker --dest docker docker.io/library/busybox 192.168.0.51/jichao-image-project/
以配置文件的形式同步
vim skopeo-sync.yml
---
192.168.0.51:5000
images:
busybox: [stable]
redis:
- "latest"
- "7.0.5"
credentials:
username: admin
password: 123456
tls-verify: true
cert-dir: /etc/containers/certs.d/192.168.10.80:5000
docker.io:
tls-verify: false
images:
coreos/etcd:
- latest
quay.io:
tls-verify: false
images:
httpd:
- "latest"
---
skopeo sync --insecure-policy --src-tls-verify=false --dest-tls-verify=false --src yaml --dest docker skopeo-sync.yml 192.168.0.51/jichao-image-project/
删除镜像
想要删除镜像的layer 还是需要通过 registry GC的方式
curl -k -u "admin:123.com" http:192.168.0.51/v2/_catalog
# 删除镜像
skopeo delete --tls-verify=false docker://192.168.0.51/jichao-image-project/mysql:test
这个工具可以和kubesphere一起使用
可以通过脚本实现
bash sync.sh docker.io 192.168.0.51/jichao-image-project/