• docker私有仓库搭建


    和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。

    使用私有仓库有许多优点:

    1. 节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;
    2. 提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。

    接下来我们就大致说一下如何在本地搭建私有仓库。

    目前Docker Registry已经升级到了v2,最新版的docker已不再支持v1。Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。此文档是在v1的基础上写的,如果需要安装registry v2,只需下载registry:2.2即可,或者可以下载后面的安装脚本运行安装。


    环境准备

    环境:两个装有Docker的Ubuntu虚拟机
    虚拟机一:192.168.112.132 用户开发机
    虚拟机二:192.168.112.136 用作私有仓库

    此处我们准备了两个虚拟机,分别都安装了Docker,其中132机器用作开发机,136机器用作registry私有仓库机器。环境准备好之后接下来我们就开始搭建私有镜像仓库。


    搭建私有仓库

    首先在136机器上下载registry镜像

    $ sudo docker pull registry
    

    下载完之后我们通过该镜像启动一个容器

    $ sudo docker run -d -p 5000:5000 registry
    

    默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下:

    $ sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
    

    这里写图片描述

    可以看到我们启动了一个容器,地址为:192.168.112.136:5000。


    测试

    接下来我们就要操作把一个本地镜像push到私有仓库中。首先在132机器下pull一个比较小的镜像来测试(此处使用的是busybox)。

    $ sudo docker pull busybox
    

    这里写图片描述

    接下来修改一下该镜像的tag。

    $ sudo docker tag busybox 192.168.112.136:5000/busybox
    

    这里写图片描述

    接下来把打了tag的镜像上传到私有仓库。

    $ sudo docker push 192.168.112.136:5000/busybox
    

    这里写图片描述

    可以看到push失败,具体错误如下:

    2015/01/05 11:01:17 Error: Invalid registry endpoint https://192.168.112.136:5000/v1/: Get https://192.168.112.136:5000/v1/_ping: dial tcp 192.168.112.136:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 192.168.112.136:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.112.136:5000/ca.crt 

    因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改docker启动配置文件(此处是修改132机器的配置)Ubuntu下配置文件地址为:/etc/init/docker.conf,在其中增加–insecure-registry 192.168.112.136:5000如下所示:

    $ sudo vi /etc/init/docker.conf
    

    这里写图片描述

    修改完之后,重启Docker服务。

    $ sudo restart docker

    centos7: /etc/docker/daemon.json
    添加如下参数:
    • "insecure-registries":["172.19.136.238:5000"]
    systemctl restart docker

    这里写图片描述

    重启完之后我们再次运行推送命令,把本地镜像推送到私有服务器上。

    $ sudo docker push 192.168.112.136:5000/busybox
    

    这里写图片描述

    可以看到镜像已经push到私有仓库中去了。

    接下来我们删除本地镜像,然后从私有仓库中pull下来该镜像。

    $ sudo docker pull 192.168.112.136:5000/busybox
    

    这里写图片描述

    到此就搭建好了Docker私有仓库。上面搭建的仓库是不需要认证的,我们可以结合nginx和https实现认证和加密功能。

    管理仓库中的镜像


    查询

    如果我们想要查询私有仓库中的所有镜像,使用docker search命令:

    # docker search registry_ip:5000/
    

    如果要查询仓库中指定账户下的镜像,则使用如下命令:

    # docker search registry_ip:5000/account/
    

    同时也可以指定镜像查询。

    删除

    目前尚未找到方法删除私有仓库中的镜像,尝试过直接从仓库存储目录中删除镜像文件,但是并不能成功删除镜像。

    Registry V2


    Registry V2.2的安装脚本如下:

    #!/bin/bash
    # Description: create a private registry v2.2
    # Version: 0.2
    #
    # Author: wangtao 479021795@qq.com
    # Date: 2015/10/29
    
    set -o xtrace
    
    if [[ $UID -ne 0 ]]; then
        echo "Not root user. Please run as root."
        exit 0
    fi
    
    # Install Docker if not
    docker -v
    if [[ $? -ne 0 ]]; then
        echo "Please install Docker first."
        exit 0
    fi
    
    REGISTRY_VERSION=2.2
    
    # Download registry image v2.2
    docker pull registry:${REGISTRY_VERSION}
    
    # Start registry container
    mkdir /opt/registry
    docker run -d -p 5000:5000 --restart=always -v /opt/registry:/var/lib/registry --name hummer_registry registry:${REGISTRY_VERSION}
    

    Registry的存放目录在Docker Hub上显示的是/tmp/registry-dev,但是映射之后发现并没有存放在该目录,查看源码发现,镜像信息存放在/var/lib/registry目录下,因此这里修改为将/opt/registry目录映射到/var/lib/registry。

    上传镜像

    # docker push registry:5000/image_name
    

    查看镜像

    # curl -XGET http://registry:5000/v2/_catalog
    # curl -XGET http://registry:5000/v2/image_name/tags/list
    

    删除镜像
    虽然看了官方API,但是还是不能成功删除,不知道digest如何生成。如果有知道的同学请不吝赐教。Docker Registry HTTP API V2
    根据网上资料显示,当前版本尚不支持该功能,再等等看新版本吧。

    =======================================================================================================

    私有仓库认证

    私有仓库搭建以后其他所有客户端均可以push、pull,docker官方提供认证方法对docker仓库进行权限保护。
    我这只用的用户权限限制,官网配置是TLS和用户权限验证一起使用。

    1.删除原启动的仓库容器

    docker stop docker-hub
    docker rm -f docker-hub

    2.创建存放密码账号的文件

    mkdir -p /docker-hub/auth
    docker run --entrypoint htpasswd registry -Bbn testuser testpassword > auth/htpasswd

    3.重新启动docker-hub容器

    docker run -d -p 5000:5000 --restart=always --name docker-hub 
      -v /docker-hub/registry:/var/lib/registry 
      -v /docker-hub/auth:/auth 
      -e "REGISTRY_AUTH=htpasswd" 
      -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" 
      -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd 
      registry

    4.现在客户端再pull、push就会提示报错,无法提交,需要登录私有仓库。

    登录
    docker login -u testuser -p testpassword 192.168.1.163:5000
    退出
    docker logout 192.168.1.163:5000

    认证以后无法直接在服务器查看 curl 127.0.0.1:5000/v2/_catalog 仓库的镜像,会出现报错,但是可以用浏览器访问。

    参考网址:
    https://docs.docker.com/registry/deploying/#/running-a-domain-registry

    ===========================================================================================================

    docker 本地镜像registry搭建(centos 7)


    docker pull registry

    1. http 访问,无认证


     docker run -d -p 5000:5000 registry

    修改 /etc/docker/daemon.json

    添加 "insecure-registries":["172.19.136.238:5000"]


    systemctl restart docker



    2. http 访问 帐号密码认证


    mkdir -p /docker-hub/auth


    docker run --entrypoint htpasswd registry -Bbn testuser testpassword > auth/htpasswd


    docker run -d -p 5000:5000 --restart=always --name docker-hub 
      -v /docker-hub/registry:/var/lib/registry 
      -v /docker-hub/auth:/auth 
      -e "REGISTRY_AUTH=htpasswd" 
      -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" 
      -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd 
      registry

    triton 上不能 -v,用Dockerfile把验证文件放到镜像里


    3. https 自签名,无验证


    mkdir -p certs

    假设使用域名 registry


    生成证书

    openssl req -newkey rsa:4096 -nodes -sha256 -keyout registry.key -x509 -days 365 -out registry.crt

    Common name registry

    其他直接回车


    生成了 registry.crt registry.key


    docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/certs:/home/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/home/certs/registry.crt -e REGISTRY_HTTP_TLS_KEY=/home/registry.key registry


    配置客户端


    /etc/docker/certs.d 下创建文件夹 registry:5000


    registry.crt 放到此文件夹中


    etc/hosts 中添加映射


    ip registry


  • 相关阅读:
    sprintf的用法
    sscanf
    Decode the tape
    poj 1579 Function Run Fun
    Where's Waldorf?
    uva Andy's First Dictionary
    UVA Hangman Judge
    UVa Automatic Editing
    界面设计规范
    web标准下的web开发流程思考
  • 原文地址:https://www.cnblogs.com/mhc-fly/p/7272346.html
Copyright © 2020-2023  润新知