docker搭建私有仓库v2(Private Registry v2),自签发证书、公网访问、登陆

若是不用自签发的证书,直接照着官方的步骤作就是了,已经很直白,可是若是须要用自签发的证书,稍微就比较麻烦,特别在用mac版的docker的时候有点坑,不过最后仍是搭建成功了,现来分享下经验。node

假设registry的域名准备用hub.domain.com(后面出现它的地方均替换为你本身要用的域名),先ssh登陆服务器,执行下面的步骤: docker

  1. 先生成自签发证书,执行下面的命令:

mkdir -p certs && openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 99999 -out certs/domain.crt服务器

在Common Name那里输入域名,其它喜欢怎么填就怎么填:

docker搭建私有仓库v2(Private Registry v2),自签发证书、公网访问、登陆

  1. 建立用户名密码:
    mkdir auth
    docker run --entrypoint htpasswd registry:latest -Bbn testuser testpassword > auth/htpasswd
    将testuser和testpassword分别替换成你须要的registry登陆名和密码.

3 中止并删除容器dom

4 Start the registry with basic authentication:ssh

docker run -d -p 5000:5000 --restart=always --name registry \
-v pwd/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v pwd/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:latestide

Try to pull an image from the registry, or push an image to the registry. These commands fail.

好了,registry服务端算是搭建好了,可是若是其它客户端直接docker login hub.domain.com:5000 的话会报错,好比:x509: certificate signed by unknown authority

下面对其它须要用到registry的docker服务器或开发机器进行一些操做:
注:若是DNS没有的记录,就须要在每一个docker客户端所在机器修改hosts文件,将registry的ip地址映射到master上测试

咱们还须要让全部机器信任自签发的registry,否则登陆会报错。3d

将以前registry服务器上生成的certs/domain.crt复制到当前机器,命名为ca.crt
创建文件夹并将ca.crt拷进去:
mkdir -p /etc/docker/certs.d/hub.domain.com:5000
cp ca.crt /etc/docker/certs.d/hub.domain.com\:5000/rest

注:若是是macOS版的docker也是同样的操做,尽管它连/etc/docker都不存在,别担忧,照作就是了。另外,macOS的用户还须要额外执行下面的命令:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crtcode

OK,接下来能够测试下:docker login hub.domain.com:5000输入登陆名和密码。若是提示Login Succeeded,恭喜你,大功告成!