Docker 搭建本地私有仓库(官方私有仓库registry、Harbor)

本文详细介绍Docker私有仓库registry的搭建与管理,包括基本概念、镜像的上传下载及常见问题解决。同时,深入解析Harbor作为企业级Docker仓库的优势与安装流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、docker仓库认识

docker 仓库,即所谓registry,实现了镜像的管理、分发,同时还包括用户的认证。dockerregistry仓库是一个无状态的、高可靠的服务器应用程序,用来存储docker镜像。

docker.io为docker官方的仓库,默认所有的pull均是从官方仓库拉取镜像。

有时候使用Docker Hub这样的公共仓库可能不方便,例如,公司内部平台应用如果使用docker镜像,则必须搭建私有仓库。

二、官方私有仓库registry

1. 私有仓库registry搭建

Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。

docker pull registry
# $user改成你的用户名
docker run -d -p 5000:5000  --restart=always  -v /home/$user/registry:/var/lib/registry registry
docker run -d -p 5000:5000  --restart=always  -v /home/shepf/registry:/var/lib/registry registry

Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,-v 映射宿主机路径。
–restart=always 代表当容器因为某些原因停止时,不管退出码是什么都自动重启。除了 always 还有 on-failure 代表只有退出码不为 0 时才重启,并且接受重启次数参数:–restart=on-failture:5

浏览器访问http://127.0.0.1:5000/v2,出现下面情况说明registry运行正常。
在这里插入图片描述

验证
现在通过push镜像到registry来验证一下。要上传镜像到私有仓库,需要在镜像的 tag 上加入仓库地址

# 通过docker tag重命名镜像
docker pull busybox #先下载最新的镜像
docker tag busybox:latest 127.0.0.1:5000/busybox:v1 #tag

# push tag后的镜像到registry
docker push 127.0.0.1:5000/busybox:v1

访问 http://127.0.0.1:5000/v2/_catalog 查看私有仓库目录,可以看到刚上传的镜像了。

本地的简单上传下载docker镜像,这个已经够用了- -!

docker registry私库镜像查看与删除

1、列出所有的镜像
curl -X GET http://192.168.37.100:5000/v2/_catalog

2、列出指定镜像的所有标签
2.1查看镜像busybox下的tag
curl -X GET http://192.168.37.100:5000/v2/busybox/tags/list

  1. 删除registry中的镜像
    docker registry私库镜像查看与删除
    参考URL: https://blog.youkuaiyun.com/nklinsirui/article/details/80705306#%E5%88%A0%E9%99%A4registry%E4%B8%AD%E7%9A%84%E9%95%9C%E5%83%8F

删除registry比较复杂,需要先查到指定标签的镜像的digest (sha256校验和),再根据这个digest来删除。

下面以删除192.168.37.100:5000/busybox/:0.0.1 镜像为例。
curl -v --silent -H “Accept: application/vnd.docker.distribution.manifest.v2+json” -X GET http://192.168.37.100:5000/v2/busybox/manifests/0.0.1 2>&1 | grep Docker-Content-Digest | awk ‘{print ($3)}’

Digest输出例子:
Docker-Content-Digest: sha256:74f634b1bc1bd74535d5209589734efbd44a25f4e2dc96d78784576a3eb5b335

执行以下命令,根据digest删除镜像:
curl -v --silent -H “Accept: application/vnd.docker.distribution.manifest.v2+json” -X DELETE http://192.168.37.100:5000/v2/busybox/manifests/sha256:74f634b1bc1bd74535d5209589734efbd44a25f4e2dc96d78784576a3eb5b335

这里的删除镜像只是删除了一些元数据,需要执行下面的垃圾回收才能真正地从硬盘上删除镜像数据。

因为缺省Docker private registry不允许删除镜像,如果遇到“405 Unsupported” 错误,需要在运行registry容器时设置REGISTRY_STORAGE_DELETE_ENABLED环境变量或参数为true。

docker-compose.yaml 例子:

 environment:
    REGISTRY_STORAGE_DELETE_ENABLED: "true"

docker run 例子:

-e REGISTRY_STORAGE_DELETE_ENABLED="true"

2. 出现问题整理

push到本地docker镜像仓库报错 erver gave HTTP response to HTTPS client

Get https://10.111.111.201:5000/v2/: http: server gave HTTP response to HTTPS client

docker客户端主机上,执行

vi  /etc/docker/daemon.json
添加 
"insecure-registries":["xxx.xxx.xxx.xxx:5000"]

# 最后重启服务
$ systemctl daemon-reload
$ systemctl restart docker

DockerRegistry设置Https

DockerRegistry设置Https
参考URL: https://www.jianshu.com/p/37da34d7e4df
linux(ubuntu)环境搭建docker-registry-https
参考URL: http://www.imooc.com/article/277196

粘贴,如下,未测试验证。 本地测试完成可以不用改Registry服务器端为https,docker客户端修改
vi /etc/docker/daemon.json
添加
“insecure-registries”:[“xxx.xxx.xxx.xxx:5000”]

已经满足个人需求。

docker version 1.6.0以上

  1. 创建docker仓库数据和配置目录
sudo mkdir -p /opt/docker/registry/data
sudo mkdir -p /opt/docker/registry/conf
  1. 创建registry容器并挂载到/opt/docker/registry/data下
sudo docker run -d -p 5000:5000 \
-v /opt/docker/registry/data:/var/lib/registry \
--name docker-registry registry:2.6.2
  1. 给registry 添加用户
apt-get install apache2-utils \
htpasswd -c /opt/docker/registry/conf/docker-registry.htpasswd rennbon

添加完一个用户后再添加其他用户不需要 "-c"
  1. 获取SSL证书
    网上很多用openssl生成证书的方法,我这里也照着试用了下,但是因为不被信任等问题导致docker login失败,这里主要通过letsencrypt生成证书
git clone https://github.com/letsencrypt/letsencryptcd letsencrypt
./letsencrypt-auto --help
这里菜兄我碰到了如下问题
OSError: Command /opt/eff.org/certbot/venv/bin/python2.7 - setuptools pkg_resources pip wheel failed with error code 2"解决方法"pip uninstall virtualenv
pip install virtualenv
给自己的域名生成证书
./letsencrypt-auto certonly --standalone -d <HOST>
执行成功后出现以下目录


/etc/letsencrypt/live/<HOST> 目录

然后执行copy,将公钥和私钥copy到当初建造了registry配置目录下,当然这里也可以不copy,在下面的Nginx代理的时候挂载当前目录
cp /etc/letsencrypt/live/<host>/fullchain.pem  /opt/docker/registry/conf/docker-registry.crt
cp /etc/letsencrypt/live/<host>/privkey.pem /opt/docker/registry/conf/docker-registry.key
  1. docker nginx 代理
sudo docker run -d \
-p 443:443 \
--name docker-registry-proxy \
-e REGISTRY_HOST="docker-registry" \
-e REGISTRY_PORT="5000" \
-e SERVER_NAME="<host>" \
--link docker-registry:docker-registry \
-v /opt/docker/registry/conf/docker-registry.htpasswd:/etc/nginx/.htpasswd:ro \
-v /opt/docker/registry/conf:/etc/nginx/ssl:ro \
containersol/docker-registry-proxy
7. 远程登录宿主机docker registry
docker login <host>Username:
Password:
Login Succeeded

三、【推荐】Docker私有仓库管理之Harbor搭建

1. 什么是Harbor

官网: https://goharbor.io/
https://github.com/goharbor/harbor

Our mission is to be the trusted cloud native repository for Kubernetes

Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum可以提供存储chart数据的仓库【注:helm就相当于k8s的yum】。另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。

harbor是VMWare公司提供的一个docker私有仓库构建程序,功能非常强大.

支持多租户签名和认证 支持安全扫描和风险分析 这次日志审计 基于角色的访问控制 支持可扩展的API和GUI Image replication between instances 国际化做的很好(目前仅支持英文和中文)

2. 为什么有了Docker registry还需要Harbor?

https://blog.youkuaiyun.com/zhangzijiejiayou/article/details/76472520
https://blog.youkuaiyun.com/luckytanggu/article/details/70285837

Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等。

官方地址:https://vmware.github.io/harbor/cn/

3. 安装

直接参考官网即可:https://goharbor.io/docs/2.4.0/install-config/

在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
离线安装:安装包包含部署的相关镜像,因此安装包比较大
OVA安装程序:当用户具有vCenter环境时,使用此安装程序,在部署OVA后启动Harbor

https://github.com/goharbor/harbor/releases
在这里插入图片描述
比如我们下载 harbor-offline-installer-v2.4.1.tgz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值