Py学习  »  docker

搭建Docker私有仓库Registry-v2

Hugh的白板 • 3 年前 • 415 次点击  
阅读 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
 
415 次点击