安裝與使用
產生password檔案
docker run --entrypoint htpasswd registry:2 -Bbn simonsu 1234qwer > /data/registry-auth/htpasswd
產生SSL
生成一个key,你的私钥,openssl会提示你输入一个密码,可以输入,也可以不输,输入的话,以后每次使用这个key的时候都要输入密码,安全起见,还是应该有一个密码保护
> openssl genrsa -des3 -out selfsign.key 4096
使用上面生成的key,生成一个certificate signing request (CSR)
如果你的key有密码保护,openssl首先会询问你的密码,然后询问你一系列问题,其中Common Name(CN)是最重要的,它代表你的证书要代表的目标,如果你为网站申请的证书,就要添你的域名。
> openssl req -new -key selfsign.key -out selfsign.csr
生成Self Signed证书 selfsign.crt就是我们生成的证书了
> openssl x509 -req -days 365 -in selfsign.csr -signkey selfsign.key -out selfsign.crt
另外一个比较简单的方法就是用下面的命令,一次生成key和证书
> openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt
執行
docker run -d -p 5000:5000 --restart=always --name registry \
-v /data/registry-auth:/auth \
-v /data/registry-ssl:/ssl \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
-e "REGISTRY_HTTP_TLS_CERTIFICATE=/ssl/server.crt" \
-e "REGISTRY_HTTP_TLS_KEY=/ssl/server.key" \
registry:2
使用
先行登入
docker login [registry-up-address]:[port]
login也可以直接指定user, password等資訊:
docker login -u [username] \
-p [password] \
-e [email] [registry-up-address]:[port]
Tag & Push
docker tag [image-name] [registry-up-address]:[port]/[image-name]
ex:
docker tag mysql 192.168.99.100:5000/mysql
注意事項
- SSL簽證部分所登記的domain name必須與registry的位置相符(例如SSL sign時候登記abc.com,則push時候必須要push到abc.com:5000/mysql這個位置)
- Client端可以把crt檔案放到docker信任的位置:
sudo mv /data/server.crt /etc/docker/certs.d/git.linkeriot.io\:5000/ca.crt
Reference
- Docker registry官方說明:https://docs.docker.com/registry/deploying/
- Openssl產生金要說明:http://blog.csdn.net/madding/article/details/26717963