基本实验情况


这里我们拿两台机器部署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 

两台机器要关闭掉防火墙 和打开路由规则


  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.

初始化操作

打开路由、设置规则
机器51.52操作

# 打开中继路由
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 防火墙规则
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -L -n
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

Day16-skopeo_linux

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的仓库地址
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

Day16-skopeo_mysql_02
Day16-skopeo_linux_03

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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

Day16-skopeo_linux_04

Day16-skopeo_skopeo_05

启动harbor

cd /usr/local/harbor
./prepare
./install

  • 1.
  • 2.
  • 3.
  • 4.

Day16-skopeo_docker_06
Day16-skopeo_skopeo_07
Day16-skopeo_docker_08

登录仓库

更改测试机器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

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

Day16-skopeo_mysql_09
Day16-skopeo_linux_10

Day16-skopeo_docker_11

使用武功机器传输一些镜像

# 机器41 
docker pull mysql
docker tag mysql:latest 192.168.0.51/jichao-image-project/mysql:test
  • 1.
  • 2.
  • 3.

Day16-skopeo_mysql_12
Day16-skopeo_docker_13

# 53 
docker pull busybox
docker tag busybox:latest 192.168.0.52/jichao-image-bak/busybox:test
  • 1.
  • 2.
  • 3.

Day16-skopeo_docker_14
Day16-skopeo_mysql_15

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
  • 1.
  • 2.

Day16-skopeo_linux_16
Day16-skopeo_docker_17
Day16-skopeo_linux_18

机器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底层 不然的话会报错 如下图


# 这边我就不多拉镜像了  仅作演示
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

Day16-skopeo_skopeo_19
Day16-skopeo_docker_20

仓库之间可以使用吗?

事实证明 在不认证的仓库之间是可以的 
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
  • 1.
  • 2.
  • 3.
  • 4.

Day16-skopeo_docker_21

也就是说 我从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 放在目的仓库 并且具有出门功能,你就可以拉取任意镜像
  • 1.
  • 2.
  • 3.

Day16-skopeo_docker_22Day16-skopeo_linux_23

拷贝到本地目录

skopeo copy docker://docker.io/library/nginx:latest dir:skopeo-test
trees skopeo-test
  • 1.
  • 2.

Day16-skopeo_skopeo_24
Day16-skopeo_linux_25

oci模式

skopeo copy docker://docker.io/library/nginx:latest oci:images_OCI
  • 1.

Day16-skopeo_skopeo_26

本地文件

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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

skopeo sync

skopeo sync --src docker --dest dir docker.io/library/httpd:latest /root/skopeo-test/httpd
  • 1.

Day16-skopeo_linux_27

查看公有仓库中busybox的所有版本

skopeo list-tags docker://docker.io/library/busybox
  • 1.

Day16-skopeo_docker_28

将一个仓库中的同一类像拉到本地

skopeo sync --src docker --dest dir docker.io/library/httpd /root/skopoe-test/httpd
  • 1.

Day16-skopeo_skopeo_29

将本地镜像同步到仓库中去

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/
  • 1.

Day16-skopeo_docker_30
Day16-skopeo_skopeo_31

两个仓库同步

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/
  • 1.

Day16-skopeo_mysql_32Day16-skopeo_docker_33

以配置文件的形式同步

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/
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

Day16-skopeo_skopeo_34
Day16-skopeo_skopeo_35

删除镜像

想要删除镜像的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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

Day16-skopeo_docker_36Day16-skopeo_skopeo_37Day16-skopeo_skopeo_38Day16-skopeo_linux_39

这个工具可以和kubesphere一起使用

可以通过脚本实现
bash sync.sh docker.io 192.168.0.51/jichao-image-project/
  • 1.
  • 2.

Day16-skopeo_linux_40