一般来说大家用容器镜像都选择 harbor,有个管理界面,还支持权限控制、漏洞扫描等,但是我公司有个客户的环境只允许通过跳板机登录 Linux 机器,没法使用浏览器,另外也只是需要一个简单一点的、好维护的仓库,找了一下,这个比较简单。如果需要更专业的私有镜像仓库,可以选择 harbor(免费)或者 jFrog 家的(收费)
生成 CA 证书
1 2 3 4 5 6 7 8 9 10
| openssl genrsa -out ca.key 4096
openssl req -utf8 -new -x509 -days 3650 -key ca.key -out ca.crt -subj '/C=CN/ST=Shanghai/L=Pudong/O=iuxt/OU=张理坤/CN=*.i.com/emailAddress=iuxt@qq.com'
openssl genrsa -out server.key 4096 openssl req -utf8 -new -key server.key -out server.csr -subj '/C=CN/ST=Shanghai/L=Pudong/O=iuxt/OU=张理坤/CN=*.i.com/emailAddress=iuxt@qq.com'
|
生成扩展属性信息
需要修改如下的 IP 和域名信息,和你的服务器保持一致
1 2 3 4 5 6 7 8 9 10
| cat >> server.ext <<'EOF' keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName=@SubjectAlternativeName
[ SubjectAlternativeName ] DNS.1=i.com DNS.2=*.i.com IP.1=192.168.1.11 EOF
|
生成服务器证书
1 2 3 4 5 6 7 8
| openssl genrsa -out server.key 4096
openssl req -utf8 -new -key server.key -out server.csr -subj '/C=CN/ST=Shanghai/L=Pudong/O=iuxt/OU=张理坤/CN=*.i.com/emailAddress=iuxt@qq.com'
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 -sha256 -extfile server.ext
|
配置客户端信任 CA 证书
使用自签名的证书的域名,客户端是不信任的, 除非客户端信任对应的自签名 CA 证书。
右键 cacert.crt 选择安装证书, 放进受信任的根证书颁发机构。
1 2
| sudo cp cacert.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
|
然后使用 curl 等工具就受信任了。
1 2 3
| sudo cp cacert.crt /etc/pki/ca-trust/source/anchors/ sudo ln -s /etc/pki/ca-trust/source/anchors/cacert.crt /etc/ssl/certs/cacert.crt sudo update-ca-trust
|
然后使用 curl 等工具就受信任了。
客户端信任证书后,需要重启一下 Docker
1
| systemctl restart docker
|
部署服务
1 2 3 4 5 6 7 8 9 10 11
| #!/bin/bash
docker run -d \ --restart=always \ --name registry \ -v "$(pwd)"/certs:/certs \ -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/server.key \ -p 443:443 \ registry:2
|
常用的 API
1 2 3 4 5 6 7 8 9 10 11
| curl https://10.0.0.101/v2/_catalog
curl https://10.0.0.101/v2/test/tags/list
curl https://10.0.0.101/v2/test/manifests/2
~~ curl -X DELETE https://10.0.0.101/v2/test/manifests/2 ~~
|