前置条件:准备一台服务器(79),服务器已安装docker。在79服务器创建/mnt/registry目录并挂接不少200G的磁盘空间。
注意:regisry是docker私服仓库,这里的步骤支持regisry:2.7.0版本,高于该版本的registry不支持htpasswd。(可以安装更高版本,但需要使用2.7.0版本来生成鉴权密码文件,参考服务端安装的第4步)
服务端安装:
1、执行以下命令生成您自己的证书:
|
生成自己的证书时,请确保在字段 Common Name 中指定一个域名。例如,本示例中该字段被指定为 dockerhub.kubekey.local。
2、拉取registry:2.7.0
docker pull registry:2.7.0
使用docker images查看是否拉取成功。
3、79服务器开放443端口
firewall-cmd --zone=public --add-port=443/udp --permanent
firewall-cmd --reload
4、创建鉴权目录和生成鉴权密码文件
|
参数解析
-B:强制密码加密
-b:使用命令行中的密码而不是提示输入密码
-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上
youraccount是账号,可以自定义自己的账号,我这里直接就自定义为youraccount
5、执行以下命令启动 Docker的hardor仓库
|
使用docker ps查看registry运行状态
参数说明:
-d:后台静默运行容器。
–restart:设置容器重启策略。
–name:命名容器。
-v:挂载信息
-e REGISTRY_HTTP_ADDR:设置仓库主机地址格式。
-e REGISTRY_HTTP_TLS_CERTIFICATE:设置环境变量告诉容器证书的位置。
-e REGISTRY_HTTP_TLS_KEY:设置环境变量告诉容器私钥的位置。
-p:将容器的 443 端口映射到Host主机的 443 端口
-e REGISTRY_AUTH:验证方式,固定写法
-e REGISTRY_AUTH_HTPASSWD_REALM:验证域名,固定写法
-e REGISTRY_AUTH_HTPASSWD_PATH:容器中验证文件的路径,要写文件的路径
6、在 /etc/hosts 中添加一个条目,将主机名(即仓库域名;在本示例中是 dockerhub.kubekey.local)映射到您机器的私有 IP 地址,如下所示。
|
使用ping dockerhub.kubekey.local测试是否配置成功
7、执行以下命令,复制证书到指定目录,并使 Docker 信任该证书。
|
注意:证书的路径“dockerhub.kubekey.local”与域名相关联。当您复制路径时,如果与上面设置的路径不同,请使用实际域名。
8、在浏览器访问https://192.168.10.79/v2,如果返回json数据则registry安装成功。
客户端测试:
前提:客户的已安装docker
1、在客户机器创建放置证书的目录和将服务端的证书拷贝到证书目录下
|
2、编写/etc/hosts文件,增加域名解析
|
使用ping dockerhub.kubekey.local测试是否配置成功
3、登录registry,按提示输入账号密码,在服务端安装的第4步设置的账号密码
docker login dockerhub.kubekey.local
4、从私服镜像库下拉nginx镜像
docker pull dockerhub.kubekey.local/nginx:latest
如果提示:Error response from daemon: manifest for dockerhub.kubekey.local/nginx:latest not found。表示正常情况,只是registry私服镜像库中没有nginx镜像。