Docker部署註冊中心、Docker建立私有鏡像庫、自簽名證書、Deploy a registry server

這是我在內部部署Docker Registry時記錄下來的筆記,操做環境是Centos 七、Docker 18.06.1-cehtml

一、運行registrynode

我當前所使用的主機的IP是192.168.1.249,工做目錄在:/data/docker/registry,nginx

  
  
  
  
  
  1. # docker run -d -p 5000:5000 --restart always --name registry \
  2. -v /data/docker/registry/data:/var/lib/registry registry:2

此時訪問,http://192.168.1.249:5000/v2/_catalog ,返回正常(空json對象),證實部署成功。docker

二、測試提交鏡像json

  
  
  
  
  
  1. # docker pull nginx:alpine
  2. # docker tag nginx:alpine 192.168.1.249:5000/nginx-alpine
  3. # docker push 192.168.1.249:5000/nginx-alpine

實際不成功,返回錯誤以下:vim

  
  
  
  
  
  1. The push refers to repository [ 192.168. 1.249: 5000/nginx-alpine]
  2. Get https: //192.168.1.249:5000/v2/: http: server gave HTTP response to HTTPS client

查看文檔得知,在配置文件中添加insecure-registries而後重啓docker便可,以下:bash

  
  
  
  
  
  1. # vim /etc/docker/daemon.json
  2. {
  3. "insecure-registries": [ "192.168.1.249:5000"]
  4. }
  5. # systemctl restart docker

此時再push果真成功,除了使用配置文件,下面來配置使用自簽名證書。dom

三、使用自簽名證書curl

生成證書要使用域名,我這裏定爲:registry.docker.local,(不用域名,直接用IP的話,要修改openssl配置文件,建議用域名)測試

  
  
  
  
  
  1. # mkdir -p /data/docker/registry/certs
  2. # openssl req \
  3. -newkey rsa:4096 -nodes -sha256 -keyout /data/docker/registry/certs/domain.key \
  4. -x509 -days 365 -out /data/docker/registry/certs/domain.crt

生成證書時要輸入一些信息,注意Common Name要輸入你使用的域名,其它可直接回車,以下:

  
  
  
  
  
  1. Country Name ( 2 letter code) [XX]:
  2. State or Province Name (full name) []:
  3. Locality Name (eg, city) [ Default City]:
  4. Organization Name (eg, company) [ Default Company Ltd]:
  5. Organizational Unit Name (eg, section) []:
  6. Common Name (eg, your name or your server 's hostname) []:registry.docker.local
  7. Email Address []:

啓動容器(相關參數按狀況調整下,如你可以使用443端口,這樣在後續就不用帶5000這個端口),以下:

  
  
  
  
  
  1. # docker run -d \
  2. --restart=always \
  3. --name registry \
  4. -v /data/docker/registry/data:/var/lib/registry \
  5. -v /data/docker/registry/certs:/certs \
  6. -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 \
  7. -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  8. -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  9. -p 5000:5000 \
  10. registry:2

四、測試使用

注意,因爲是隨便自定義的域名,記得先把域名 registry.docker.local添加到/etc/hosts文件,

  
  
  
  
  
  1. # docker tag nginx:alpine registry.docker.local:5000/nginx-alpine
  2. # docker push registry.docker.local:5000/nginx-alpine

此時報錯,以下:

  
  
  
  
  
  1. The push refers to repository [registry.docker. local: 5000/nginx-alpine]
  2. Get https: //registry.docker.local:5000/v2/: x509: certificate signed by unknown authority

看文檔,得知要把 domain.crt 文件放到 /etc/docker/certs.d/registry.docker.local:5000/ca.crt ,(注意,你在哪臺機作push操做,就放到哪臺機呀)

  
  
  
  
  
  1. # mkdir -p /etc/docker/certs.d/registry.docker.local:5000
  2. # cp xxx/domain.crt /etc/docker/certs.d/registry.docker.local:5000/

這時候再push就成功了,以下:

  
  
  
  
  
  1. # docker push registry.docker.local:5000/nginx-alpine
  2. The push refers to repository [registry.docker.local: 5000/nginx-alpine]
  3. a83dbde6ba05: Layer already exists
  4. 431a5c7929dd: Layer already exists
  5. 39e8483b9882: Layer already exists
  6. df64d3292fd6: Layer already exists
  7. latest: digest: sha256: 57a94fc99816c6aa225678b738ac40d85422e75dbb96115f1bb9b6ed77176166 size: 1153

訪問 https://registry.docker.local:5000/v2/_catalog,也看到結果,以下:

  
  
  
  
  
  1. # curl https://registry.docker.local:5000/v2/_catalog --insecure
  2. { "repositories":[ "nginx-alpine"]}

看來自定義證書還很不方便,可使用免費證書:https://letsencrypt.org (Let's Encrypt)


參考:
https://docs.docker.com/registry/deploying/ 
https://docs.docker.com/registry/insecure/#deploy-a-plain-http-registry

 

原文地址:http://www.javashuo.com/article/p-egcbwqcr-mm.html

相關文章
相關標籤/搜索