Docker(三):Docker倉庫配置


1、倉庫介紹

  倉庫(repository)用來集中管理Docker鏡像,支持鏡像分發和更新。

  目前世界上最大最知名的公共倉庫是Docker官方的Docker Hub,國內比較知名的有:Docker Pool、阿里雲倉庫等。

 

2、鏡像倉庫

  倉庫下面包含着一組鏡像,鏡像之間用標簽(tag)區分,一個完整的鏡像路徑通常由服務器地址、倉庫名稱和標簽組成,如:

  registry.hub.docker.com/official/ubuntu:14.04

  2.1 上傳鏡像

    docker push localhost:5000/official/ubuntu:14.04

    上述命令是向本地倉庫上傳鏡像,如果不寫倉庫地址默認想docker官方倉庫上傳鏡像,向官方倉庫上傳鏡像需要登錄賬戶,上傳的目標是自己的倉庫。

  2.2 下載鏡像

    docker pull ubuntu:14.04

    不加tag默認下載所有ubuntu倉庫下的官方鏡像。

  2.3 查詢鏡像

    docker search localhost:5000/ubuntu    #倉庫開發者需要實現查詢功能

    

3、構建私有倉庫

  Docker私有服務(private registry)用來建設私有倉庫,部署私有倉庫的優點:

    可獨立開發和運維私有倉庫;

    節省帶寬資源

    有獨立的賬戶管理系統

    增加了定制化功能

  搭建私有倉庫之前要部署Docker Private Registry,命令如下:

    docker run -d --hostname localhost --name registry-v2 \

    -v /opt/data/distribution:/var/lib/registry/docker/registry/v2 \

    -p 5000:5000 registry:2.0

    上面運行一個名為registry-v2的服務,-v把本地目錄mount到容器內的鏡像目錄,方便開發者查看和管理本地鏡像數據。

    上傳下載鏡像:

      docker push/pull localhost:5000/official/ubuntu:14.04

      由於暴露的5000端口,能訪問該主機的用戶都可以通過5000端口上傳或下載鏡像

 

4、構建反向代理

  在實際使用中,暴露主機端口是不安全的,一般設計私有倉庫時會加上https反向代理。

  假設私有倉庫的地址:https://my.docker.io,利用opendns組織下的nginx-auth-proxy開源項目實現反向代理功能。

  開源項目地址:https://github.com/opendns/nginx-auth-proxy

  實現反向代理需要生成服務器的一對密鑰和根證書,利用OpenSSL生成自簽名證書命令如下:

    生成私鑰文件server.key:openssl genrsa -out server.key 2048

    生成根證書文件server.pem:openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 3650 \

    -out server.pem -subj "/C=CN/ST=state/L=city/O=Your Company Name/OU=localhost"

    將pem證書轉換成crt證書,放到系統證書目錄(用戶訪問registry之前需要做這一步):

      cat server.pem | sudo tee -a /etc/ssl/certs/server.crt

    nginx把生成的證書通過Dockerfile加載到鏡像中:

      ADD server.crt /etc/ssl/certs/docker-registry

      ADD server.key /etc/ssl/private/docker-registry

    配置nginx支持ssl功能

      ssl;

      ssl_certificate  /etc/ssl/certs/docker-registry;

      ssl_certificate  /etc/ssl/private/docker-registry

    配置用戶驗證文件

      auth_basic_user_file <htpasswd file name>

    運行nginx容器,啟動代理功能

      docker run -d --hostname my.docker.io --name nginx --link registry:registry -p 443:443 nginx

    nginx配置反代到registry

      proxy_pass http://registry:5000;

    請求頭配置

      proxy_set_header  Host  $http_host;

      proxy_set_header  X-Real-IP  $remote_addr;

      proxy_set_header  Authorization  "";

      proxy_set_header  Accept-Encoding  "";

      proxy_set_header  X-Forwarded-By  $Server_addr:$server_port;

      proxy_set_header  X-Forwarded-For  $remote_addr;  

     資源訪問配置

      不需要鑒權

        location /v2/ {

          auth_basic off;

          proxy_pass  http://docker-registry;

        }

      需要鑒權

        location /auth/{

          auth_basic  "Resticted";

          auth_basic_user_file  passwd;

          proxy_pass  http://docker-registry;

        } 

    上傳私有鏡像到registry,必須先登錄

      docker login -u <usernam> -p <password> -e <email> my.registry.io


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM