前言

目前国内把docker镜像仓库墙了,很多服务器要更新新的镜像都要用本地导入的方式更新镜像,多台服务器用起来就很麻烦,同样的,家里的nas群晖也没办法很好的用docker了,为了以后方便,又因为自己博客网站服务器就在香港,可以用这个服务器搭建一个私人镜像仓库。


准备工作

  • 服务器:centos7服务器 -1核2G,40G硬盘(自己用,目前还不用扩充硬盘)
  • docker镜像:docker.io/library/registry:latest

搭建服务端

拉取镜像

docker pull registry

创建相关文件夹

本人项目放在/data/docker-space/docker-registry-deploy文件夹下,以下所有涉及到文件和文件夹相关的命令都是已该文件夹为根目录。

mkdir auth config data

注:auth文件夹存放加密的用户名密码文件htpasswdconfig文件夹存放容器的配置文件config.ymldata文件夹挂载上传的镜像文件。

创建用户加密文件:htpasswd

docker run --entrypoint htpasswd registry:latest -Bbn name password123  > ./auth/htpasswd

注:以上方式我这边报以下错误:

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "htpasswd": executable file not found in $PATH: unknown.

本人查询到别的处理方式是安装httpd,用该软件创建加密文件

# 1、安装httpd软件
yum install httpd
# 2、用该软件创建用户密码加密文件
htpasswd -Bbn test 123456 > auth/htpasswd

编写配置文件:config.yml

配置文件内容如下:

version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3

启动创建与运行脚本

docker run -d -p 5000:5000 --restart=always  --name=registry \
-v $PWD/config/:/etc/docker/registry/ \
-v $PWD/auth/:/auth/ \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v $PWD/data/:/var/lib/registry/ \
registry:latest

验证服务可用性

# 无认证的私有仓库:
curl -X GET http://ip:port/v2/_catalog
# 带认证的私有仓库
curl -u username:password -X GET http://ip:port/v2/_catalog
# 带认证的不带-u参数,因验证不通过会报如下错误:
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}

清理仓库镜像

这个我得回去找找,以前不写博客,写过一个清理脚本,不知道还能不能找回来。


参考抄袭文章:

搭建docker私有仓库 配置用户名密码

docker 私人仓库 设置密码报错(已解决)