一、前言
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
长按/扫码关注我吧,会找到你想要的……