安装轻量级的Docker Registry:zot

服务器在HK,但是去拉取腾讯广州Docker镜像仓的时候总是失败,还是企业版,大无语了。

没办法,被逼无奈,干脆在HK建一个镜像仓建在,然后推送到那里,这样就方便了。

本意是用Harbor,但是Harbor实在太沉重了,而且Harbor的最大问题是过期镜像清理,如果过期镜像出错了,那是清理不掉的,除非重新打一份上传覆盖掉错误的镜像,然后再删除才可以,但问题是如果有700、800个错的镜像,是真没有那个劲去清理了。

那这次就想建个轻量级的,连WEB界面都不要,只要docker login后能push和pull即可

这样的话zot是个不错的选择:

下载zot

1wget https://github.com/project-zot/zot/releases/download/v2.1.10/zot-linux-amd64

准备配置文件

 1cat >/usr/local/bin/config.json << EOF
 2{
 3  "distSpecVersion": "1.0.0-dev",
 4  "http": {
 5    "address": "127.0.0.1",
 6    "port": "5000",
 7    "compat": ["docker2s2"],
 8    "auth": {
 9      "htpasswd": {
10        "path": "/usr/local/bin/htpasswd"
11      }
12    }
13  },
14  "storage": {
15    "rootDirectory": "/data/registry"
16  }
17}
18EOF

注意上面compat,如果不配置,就会出现push的时候出现manifest invalid错误,这是因为docker和oci的标准不同,zot是遵循oci标准的

准备htpasswd,必须用bcrypt的方式,zot不支持其它的!

1-B  Force bcrypt hashing of the password (very secure)
2htpasswd -B -c /usr/local/bin/htpasswd user01

准备zot.service

 1cat > /etc/systemd/system/zot.service << EOF 
 2[Unit]
 3After=network.target nss-lookup.target
 4
 5[Service]
 6User=root
 7ExecStart=/usr/local/bin/zot-linux-amd64 serve /usr/local/bin/config.json
 8Restart=on-failure
 9RestartSec=10s
10LimitNOFILE=infinity
11
12[Install]
13WantedBy=multi-user.target
14EOF

那大家注意到了,zot只监听到了127.0.0.1:5000,所以前面还需要用caddy代理一下

准备caddy的配置文件

 1cat > /usr/local/bin/Caddyfile << EOF 
 2registry.rendoumi.com {
 3    reverse_proxy 127.0.0.1:5000 {
 4        header_up X-Real-IP {remote_host}
 5        transport http {
 6            dial_timeout 15s
 7            response_header_timeout 300s
 8        }
 9    }
10}
11EOF

准备caddy的systemd文件

 1cat > /etc/systemd/system/caddy.service
 2[Unit]
 3After=network.target
 4Wants=network.target
 5
 6[Service]
 7WorkingDirectory=/usr/local/bin/
 8Type=simple
 9User=root
10ExecStart=/usr/local/bin/caddy run --config /usr/local/bin/Caddyfile
11Restart=on-failure
12RestartSec=1s
13
14[Install]
15WantedBy=multi-user.target

分别启动服务就好了

1systemctl daemon-reload
2
3systemctl start zot
4systemctl start caddy

因为完全没有web界面,只能用curl进行测试了

1curl -u user01:password http://localhost:5000/v2/_catalog -vvvv

成功后用docker login后,docker push、docker pull 进行验证就OK了


Caddy自动签发任意域名证书
comments powered by Disqus