Docker(三):Docker倉庫配置

一、倉庫介紹node

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

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

 

二、鏡像倉庫github

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

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

  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    #倉庫開發者須要實現查詢功能

    

三、構建私有倉庫

  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端口上傳或下載鏡像

 

四、構建反向代理

  在實際使用中,暴露主機端口是不安全的,通常設計私有倉庫時會加上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

相關文章
相關標籤/搜索