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

posted on 2017-09-14 23:06  杜先生的博客  阅读(7603)  评论(0编辑  收藏  举报