一般来说大家用容器镜像都选择 harbor,有个管理界面,还支持权限控制、漏洞扫描等,但是我公司有个客户的环境只允许通过跳板机登录 Linux 机器,没法使用浏览器,另外也只是需要一个简单一点的、好维护的仓库,找了一下,这个比较简单。如果需要更专业的私有镜像仓库,可以选择 harbor(免费)或者 jFrog 家的(收费)
自签名证书
1 2 3 4 5 6
| mkdir -p certs
openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout certs/i.com.key \ -addext "subjectAltName = DNS:hub.i.com" \ -x509 -days 3650 -out certs/i.com.crt
|
docker 信任证书
将文件复制到每个 Docker 上 主机。您无需重新启动 Docker。
1 2
| mkdir -p /etc/docker/certs.d/hub.i.com/ cp i.com.crt /etc/docker/certs.d/hub.i.com/
|
如果更换了默认端口,这里的文件夹也要加上端口,比如 /etc/docker/certs.d/hub.i.com:8000/
部署服务
1 2 3 4 5 6 7 8 9 10 11 12
| #!/bin/bash
docker run -d \ --restart=always \ --name registry \ -v ./data:/var/lib/registry \ -v ./certs:/certs \ -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/i.com.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/i.com.key \ -p 443:443 \ registry:2
|
常用的 API
假设镜像名为:hub.i.com/iuxt/test:latest
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| curl https://hub.i.com/v2/_catalog
curl https://hub.i.com/v2/iuxt/test/tags/list
curl https://hub.i.com/v2/iuxt/test/manifests/latest
curl -s -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \ https://hub.i.com/v2/iuxt/test/manifests/latest \ | jq -r '.config.digest'
curl -X DELETE \ https://hub.i.com/v2/iuxt/test/manifests/sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
垃圾回收
在 Docker Registry 配置文件 config.yml 中,启用删除功能:
1 2 3
| storage: delete: enabled: true
|
执行垃圾回收操作
1
| docker exec <registry-container> bin/registry garbage-collect /etc/docker/registry/config.yml
|
附:
自签证书以及配置 OS 信任 CA 证书:制作和使用自签名证书
快速签发证书小工具:https://github.com/iuxt/my_cert