• 【云原生 | 43】快速搭建Docker Registry私有仓库


    🍁博主简介
            🏅云计算领域优质创作者
            🏅新星计划第三季python赛道第一名
            🏅阿里云ACE认证高级工程师
            🏅阿里云开发者社区专家博主

    💊交流社区CSDN云计算交流社区欢迎您的加入!

    目录

    1. 安装DockerRegistry 

    1.1 基于容器安装运行 

    1.2 本地安装运行 

    2. 配置TLS证书 

    2.1 自行生成证书 

    2.2 从代理商申请证书

    2.3 启用证书 

     👑👑👑结束语👑👑👑


    在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便;另外有时候只是希望在内部用户之间进行分享,不希望暴露出去。这种情况下,就有必要搭建一个本地私有镜像仓库。

    1. 安装DockerRegistry 

    Docker Registry工具目前最新为2.0系列版本,这一版本与一些类库、工具一起被打包为负责容器内容分发的工具集:Docker Distribution。目前其核心的功能组件仍为负责镜像仓库的管理。
    新版本的Registry基于Golang进行了重构,提供更好的性能和扩展性,并且支持Docker 1.6+的API,非常适合用来构建私有的镜像注册服务器。官方仓库中也提供了Registry的镜像,因此用户可以通过容器运行和源码安装两种方式来使用Registry。

    1.1 基于容器安装运行 

    基于容器的运行方式十分简单,只需要一条命令:

    $ docker run -d -p 5000:5000 --restart=always --name registry registry:2.1
    启动后比较关键的参数是指定配置文件和仓库存储路径。 Registry默认的配置文件为/etc/docker/registry/config.yml,因此,通过如下命令,可以指定使用本地主机上的配置文件(如/home/user/registry-conf)。
    1. $ docker run -d -p 5000:5000 \
    2. --restart=always \
    3. --name registry \
    4. -v /home/user/registry-conf/config.yml:/etc/docker/registry/config.yml \
    5. registry:2
    此外,Registry默认的存储位置为/var/lib/registry,可以通过-v参数来映射本地的路径到容器内。

    例如下面的例子将镜像存储到本地/opt/data/registry目录。

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

    1.2 本地安装运行 

    有时候需要本地运行仓库服务,可以通过源码方式进行安装。首先安装Golang环境支持,以Ubuntu为例,可以执行如下命令:
    1. $ sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable
    2. $ sudo apt-get update
    3. $ sudo apt-get install golang
    确认Golang环境安装成功,并配置$GOPATH环境变量,例如/go。创建$GOPATH/src/github.com/docker/目录,并获取源码,如下所示
    1. $ mkdir -p $GOPATH/src/github.com/docker/
    2. $ cd $GOPATH/src/github.com/docker/
    3. $ git clone https://github.com/docker/distribution.git
    4. $ cd distribution
    将自带的模板配置文件复制到/etc/docker/registry/路径下,创建存储目录/var/lib/registry:
    1. $ cp cmd/registry/config-dev.yml /etc/docker/registry/config.yml
    2. $ mkdir -p /var/lib/registry

    然后执行安装操作:

    $ make PREFIX=/go clean binaries

    编译成功后,可以通过下面的命令来启动:

    $ registry serve /etc/docker/registry/config.yml
    此时使用访问本地的5000端口,看到返回成功(200 OK),则说明运行成功:
    1. $ curl -i 127.0.0.1:5000/v2/
    2. HTTP/1.1 200 OK
    3. Content-Length: 2
    4. Content-Type: application/json; charset=utf-8
    5. Docker-Distribution-Api-Version: registry/2.0
    6. X-Content-Type-Options: nosniff
    7. Date: Wed, 31 Sep 2016 06:36:10 GMT
    8. {}

    2. 配置TLS证书 

    当本地主机运行Registry服务后,所有能访问到该主机的Docker Host都可以把它作为私有仓库使用。只需要在镜像名称前面添加上具体的服务器地址。

    例如将本地的ubuntu:latest镜像上传到私有仓库myrepo.com:

    1. $ docker tag ubuntu myrepo.com:5000/ubuntu
    2. $ docker push myrepo.com:5000/ubuntu

    或者从私有仓库myrepo.com下载镜像到本地:

    1. $ docker pull myrepo.com:5000/ubuntu
    2. $ docker tag myrepo.com:5000/ubuntu ubuntu
    私有仓库需要启用TLS认证,否则会报错。在第一部分中,我们介绍了通过添加DOCKER_OPTS="--insecure-registry myrepo.com:5000来避免这个问题。在这里将介绍如何获取和生成TLS证书。

    2.1 自行生成证书 

    使用openssl工具可以很容易地生成私人证书文件:

    1. $ mkdir -p certs
    2. $ openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/myrepo.key -x509 -days 365 -out certs/myrepo.crt
    生成过程中会提示填入各种信息,注意CN一栏的信息要填入跟访问的地址相同的域名,例如这里应该为myrepo.com。
    生成结果为秘钥文件myrepo.key,以及证书文件myrepo.crt。 其中证书文件需要发送给用户,并且配置到用户Docker Host上,注意路径需要跟域名一致,例如:
    /etc/docker/certs.d/myrepo.com:5000/ca.crt

    2.2 从代理商申请证书

    如果Registry服务需要对外公开,需要申请大家都认可的证书。 知名的代理商包括SSLs.com、GoDaddy.com、LetsEncrypt.org、GlobalSign.com等,用户可以自行选择权威的证书提供商。

    2.3 启用证书 

    当拥有秘钥文件和证书文件后,可以配置Registry启用证书支持,主要通过REGISTRY_HTTP_TLS_CERTIFICATE和REGISTRY_HTTP_TLS_KEY参数来设置:
    1. docker run -d -p 5000:5000 --restart=always --name registry \
    2. -v `pwd`/certs:/certs \
    3. -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myrepo.crt \
    4. -e REGISTRY_HTTP_TLS_KEY=/certs/myrepo.key \
    5. registry:2

     👑👑👑结束语👑👑👑

  • 相关阅读:
    k8s部署三个节点zookeeper,1主2从集群
    (附源码)计算机毕业设计SSM家政服务系统
    画布
    [附源码]计算机毕业设计基于Springboot校刊投稿系统
    如何认识包装类
    Linux篇---第一篇
    OV5640的参数与配置方法
    消息队列MQ
    前端研习录(38)——ES6 对象扩展讲解及示例分析
    fix: prosemirror adds two extra spaces when paste
  • 原文地址:https://blog.csdn.net/qq_62294245/article/details/127725638