社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

搭建Docker私有仓库Registry-v2

Hugh的白板 • 6 年前 • 620 次点击  
阅读 7

搭建Docker私有仓库Registry-v2

一、前言

1、版本说明

由于v1版本的registry被官方废弃了,所以我们选择安装v2版本(注:v2版本需要TLS加密连接)。registry V2要求使用https访问,那么我们先做一些准备,为了方便,这边模拟以域名reg.hughpro.com 进行搭建。

2、环境介绍

工具/环境 版本
CentOS 7.7
docker 19.03.8
registry V2

二、安装

1、配置hosts文件映射

找到hosts文件,增加一行映射

echo '192.168.1.2 reg.hughpro.com'>> /etc/hosts
复制代码

2、配置证书

正式环境需要在权威机构申请的证书使用,这里呢选择使用私有证书,创建步骤:

$ cd ~
$ mkdir -p certs
# 生成key
$ openssl genrsa -out reg.hughpro.com.key 2048
# 生成cert
$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout reg.zkgc.com.key -x509 -days 365 -out reg.zkgc.com.crt
# 会有一些信息需要填写,按照提示填写即可
复制代码

由于是自签名证书,默认是不受Docker信任的,故而需要将证书添加到Docker的根证书中,Docker在CentOS 7中,证书存放路径是/etc/docker/certs.d/域名

$ mkdir -p /etc/docker/certs.d/reg.hughpro.com
$ cp ~/certs/reg.hughpro.com.crt /etc/docker/certs.d/reg.hughpro.com/
复制代码

配置完之后重启下docker

$ service docker restart
复制代码

3、启动私有仓库

启动Docker私有仓库:

$ docker run -d -p 443:5000 --restart=always --name registry \
  -v `pwd`/certs:/certs \   
  -v /opt/docker-image:/opt/docker-image \       
  -e STORAGE_PATH=/opt/docker-image \  
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/reg.hughpro.com.crt \ 
  -e REGISTRY_HTTP_TLS_KEY=/certs/reg.hughpro.com.key \   
  registry:2
复制代码

其中,之所以挂载/opt/docker-image目录,是为了防止私有仓库容器被删除,私有仓库中的镜像也会丢失。

4、测试推送、下载镜像

只需指定私有仓库的地址,即可将镜像推送到私有仓库,但是我们知道,Docker Hub是默认的Docker Registry,因此,hello-world:1.0 相当于docker.io/hello-world:1.0 。因此,要想将镜像推送到私有仓库,需要修改镜像标签,打完标签后既可以进行推送了

  • 给镜像打标签
$ docker tag hello-workd:1.0 reg.hughpro.com/hello-world:1.0
复制代码
  • 推送镜像
$ docker push reg.hughpro.com/hello-world

The push refers to repository [reg.hughpro.com/hello-world]
9c27e219663c: Pushed 
latest: digest: sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 size: 525
复制代码
  • 下载镜像
$ docker pull reg.hughpro.com/hello-world
复制代码

到这Docker私有仓库就可以使用了,下面的登陆权限可以根据实际情况进行配置。

三、配置登陆权限

在很多时候我们需要用户登录后才能访问私有仓库,那么我们可以使用htpasswd 方式设置docker仓库进行登陆认证。

# 为防止未知问题,我们可以先停止之前启动好的私有仓库:
docker kill registry
# 使用htpasswd命令生成密码文件前,需要先安装httpd-tools
yum install httpd-tools
# 创建密码文件,并添加一个用户dockerhub,密码是dockerhub123
cd ~
mkdir auth
htpasswd -Bbn dockerhub dockerhub123 > auth/htpasswd

# 切换到~ 目录,并启动私有仓库
docker run -d -p 443:5000 --restart=always --name registry2 \
  -v /opt/docker-image:/var/lib/registry \ 
  -v `pwd`/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/reg.hughpro.com.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/reg.hughpro.com.key \
  -v `pwd`/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  registry:2
复制代码

再次往私有仓库里面推送镜像,测试一下

docker push reg.hughpro.com/hello-world

461f75075df2: Image push failed 
no basic auth credentials
复制代码

看到提示内容,说明需要认证,登陆一下,之后,再次执行推送,

docker login reg.hughpro.com
docker push reg.hughpro.com/hello-world
复制代码

就可以正常push镜像到私有仓库了.

四、参考文档

  • 官方文档:https://docs.docker.com/registry/deploying/#/running-a-domain-registry

长按/扫码关注我吧,会找到你想要的……

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62982