首页 > 其他分享 >【Docker】搭建 Docker 私有化仓库

【Docker】搭建 Docker 私有化仓库

时间:2024-08-02 18:29:00浏览次数:7  
标签:5000 私有化 registry Registry 镜像 Docker docker 搭建

搭建 Docker 私有化仓库是一个非常重要的实践,它能够帮助你安全地存储和管理 Docker 镜像,而无需将其发布到公共 Docker Hub。通过使用私有化仓库,你可以:

  • 提高安全性:镜像存储在受控的环境中。
  • 提升效率:在公司网络内传输镜像,速度更快。
  • 实现自动化:配合 CI/CD 系统实现自动镜像管理。

本文将详细介绍如何在不同环境下搭建 Docker 私有化仓库,并提供配置和优化建议。

一、Docker 私有化仓库的基本原理

Docker 私有化仓库(也称为 Docker Registry)是一种允许用户存储和分发 Docker 镜像的软件应用。Docker 官方提供了一个开源的 Docker Registry 镜像,可以在本地或服务器上轻松运行。

Registry 与 Repository

  • Registry:是存储和管理 Docker 镜像的服务。
  • Repository:是 Registry 中具体的一个镜像集合,比如 nginx

镜像标签

  • Tag:是一个指向镜像的标签,如 nginx:latest

二、搭建 Docker 私有化仓库

方法一:使用 Docker 官方 Registry 镜像

Docker 官方提供了一个开源的 Docker Registry 镜像,可以直接使用。

1. 拉取并运行官方 Registry 镜像

首先,拉取官方 Registry 镜像并运行:

docker pull registry:2

运行私有化仓库:

docker run -d -p 5000:5000 --name my-registry registry:2
  • -d:后台运行容器。
  • -p 5000:5000:将主机的 5000 端口映射到容器的 5000 端口。
  • --name my-registry:为容器命名为 my-registry
2. 推送镜像到私有化仓库

将本地镜像推送到私有化仓库:

  1. 给镜像打标签:

    docker tag <IMAGE_ID> localhost:5000/my-image:latest
    

    例如:

    docker tag ubuntu:latest localhost:5000/ubuntu:latest
    
  2. 推送镜像到私有仓库:

    docker push localhost:5000/ubuntu:latest
    
3. 从私有化仓库拉取镜像

在其他 Docker 主机上,从私有化仓库拉取镜像:

docker pull localhost:5000/ubuntu:latest

注意:在其他机器上访问私有仓库时,需要将 localhost 替换为私有仓库所在机器的 IP 地址或域名。

4. 验证仓库中的镜像

使用 curl 验证仓库中存储的镜像:

curl http://localhost:5000/v2/_catalog

返回结果:

{
  "repositories": [
    "ubuntu"
  ]
}
5. 使用 docker-compose 启动私有仓库

你可以使用 docker-compose 来简化启动过程:

version: '3'

services:
  registry:
    image: registry:2
    ports:
      - "5000:5000"
    volumes:
      - ./data:/var/lib/registry

运行 docker-compose

docker-compose up -d

方法二:使用 Harbor 搭建企业级私有仓库

Harbor 是一个开源的企业级 Docker Registry,提供更丰富的功能,如用户管理、访问控制、镜像复制等。

1. 安装 Docker 和 Docker Compose

确保你的系统上已经安装了 Docker 和 Docker Compose。

2. 下载 Harbor 安装包

访问 Harbor 官方下载页面 下载最新版本。

wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz

解压安装包:

tar xzvf harbor-online-installer-v2.9.0.tgz
cd harbor
3. 配置 Harbor

harbor 目录下,有一个 harbor.yml 配置文件。根据需要进行配置:

hostname: reg.mycompany.com  # 修改为你的域名或IP

https:
  port: 443
  certificate: /your/certificate/path
  private_key: /your/private/key/path

harbor_admin_password: Harbor12345  # 设置管理员密码

注意:确保使用正确的域名和证书路径。可以通过 Let’s Encrypt 获取免费 SSL 证书。

4. 安装和启动 Harbor

执行以下命令安装和启动 Harbor:

./install.sh

启动 Harbor 服务:

docker-compose up -d
5. 访问 Harbor Web UI

在浏览器中访问 https://reg.mycompany.com,使用配置的管理员账户登录,默认用户名为 admin,密码为配置文件中设置的 harbor_admin_password

6. 推送镜像到 Harbor
  1. 登录 Harbor:

    docker login reg.mycompany.com
    
  2. 给镜像打标签:

    docker tag <IMAGE_ID> reg.mycompany.com/myproject/my-image:latest
    
  3. 推送镜像到 Harbor:

    docker push reg.mycompany.com/myproject/my-image:latest
    
7. 从 Harbor 拉取镜像

在其他机器上,登录 Harbor 并拉取镜像:

docker login reg.mycompany.com
docker pull reg.mycompany.com/myproject/my-image:latest

方法三:使用 GitLab Container Registry

GitLab 提供了集成的 Container Registry,可以作为私有化 Docker 仓库使用。

1. 安装 GitLab

参考 GitLab 官方文档 安装 GitLab。

2. 启用 Container Registry

编辑 GitLab 配置文件 /etc/gitlab/gitlab.rb,启用 Registry:

registry_external_url 'https://registry.mycompany.com'

重新配置 GitLab:

gitlab-ctl reconfigure
3. 登录 GitLab Container Registry
docker login registry.mycompany.com
4. 推送镜像到 GitLab Container Registry
  1. 给镜像打标签:

    docker tag <IMAGE_ID> registry.mycompany.com/mygroup/myproject/my-image:latest
    
  2. 推送镜像:

    docker push registry.mycompany.com/mygroup/myproject/my-image:latest
    
5. 从 GitLab Container Registry 拉取镜像
docker pull registry.mycompany.com/mygroup/myproject/my-image:latest

三、配置私有化仓库的安全性

1. 使用 HTTPS 保护传输

在生产环境中,强烈建议为 Docker 私有化仓库配置 HTTPS,以保护数据传输安全。

生成自签名证书

使用 openssl 生成自签名证书:

mkdir -p certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt

生成过程会提示输入信息,如下所示:

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Guangdong
Locality Name (eg, city) []:Shenzhen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:[email protected]

将证书挂载到容器中:

docker run -d -p 5000:5000 --name my-registry \
  -v `pwd`/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry:2

2. 配置认证访问

Docker 私有化仓库支持使用基础认证(Basic Auth)保护访问。

创建用户和密码文件

使用 htpasswd 创建用户和密码文件:

apt-get install apache2-utils -y
htpasswd -cB htpasswd myuser
  • myuser:用户名。
  • 你会被提示输入密码并确认。
启动带认证的 Registry

将认证文件挂载到容器中:

docker run -d -p 5000

:5000 --name my-registry \
  -v `pwd`/certs:/certs \
  -v `pwd`/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  registry:2

3. 配置防火墙

为确保私有化仓库的安全性,建议配置防火墙规则,仅允许特定的 IP 或子网访问仓库。

# 允许 192.168.1.0/24 子网访问
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5000 -j ACCEPT

# 拒绝其他 IP 访问
iptables -A INPUT -p tcp --dport 5000 -j DROP

四、管理和监控私有化仓库

1. 查看仓库中的镜像

使用 curl 查看仓库中的镜像:

curl -u myuser:mypassword https://localhost:5000/v2/_catalog

2. 查看镜像标签

查看指定镜像的标签:

curl -u myuser:mypassword https://localhost:5000/v2/<repository>/tags/list

例如:

curl -u myuser:mypassword https://localhost:5000/v2/ubuntu/tags/list

3. 删除镜像

删除指定镜像的标签:

curl -X DELETE -u myuser:mypassword https://localhost:5000/v2/<repository>/manifests/<digest>

获取 digest

curl -u myuser:mypassword -I -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
https://localhost:5000/v2/<repository>/manifests/<tag>

例如:

curl -u myuser:mypassword -I -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
https://localhost:5000/v2/ubuntu/manifests/latest

4. 配置镜像清理策略

定期清理不再使用的镜像和标签,节省存储空间。可以使用 Registry GC 工具。

  1. 停止 Registry:

    docker stop my-registry
    
  2. 运行垃圾回收:

    docker run --rm -v /var/lib/registry:/var/lib/registry registry:2 garbage-collect /etc/docker/registry/config.yml
    
  3. 重启 Registry:

    docker start my-registry
    

5. 使用监控工具

可以使用 Prometheus 和 Grafana 监控 Registry 的性能和使用情况。

五、常见问题和解决方案

1. Docker 客户端无法连接私有仓库

  • 检查私有仓库的网络配置和防火墙规则。
  • 确保使用正确的域名或 IP 地址。
  • 如果使用自签名证书,确保客户端信任该证书。

2. 推送镜像失败

  • 检查用户权限和认证配置。
  • 检查仓库的存储空间是否已满。
  • 确保 Docker 客户端版本与 Registry 版本兼容。

3. 镜像拉取速度慢

  • 使用 CDN 或镜像加速服务。
  • 配置缓存代理,减少重复下载。

总结

通过本文的介绍,你应该已经掌握了搭建 Docker 私有化仓库的基本步骤和配置方法。无论是使用官方的 Docker Registry 镜像,还是更强大的 Harbor 或 GitLab Container Registry,私有化仓库都能为你的镜像管理带来更高的安全性和效率。

标签:5000,私有化,registry,Registry,镜像,Docker,docker,搭建
From: https://blog.csdn.net/u013675821/article/details/140877646

相关文章

  • 【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器
    【【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器一、项目介绍1.1项目简介1.2使用方法二、本次实践介绍2.1本地环境规划2.2本次实践介绍三、本地环境检查3.1安装Docker环境3.2检查Docker服务状态3.3检查Docker版本3.4检查docke......
  • 大数据场景下的Zookeeper集群的搭建
    本篇文件将介绍如何搭建zookeeper集群,并集合大数据相关组件介绍zookeeper的功能一、Zookeeper是做什么的,我们搭建它有什么用处Zookeeper是一个分布式的服务管理框架,它负责存储和管理大家都关心的数据,基于观察者涉及模式,Zookeeper接受观察者的注册,一旦这些数据的状态发生了变......
  • docker安装Jenkins
    1、拉取jenkinsdockerpulljenkins/jenkins2、配置jenkins路径mkdir-p/data/jenkins_home3、启动jenkinsdockerrun-d-uroot-p8081:8080-p50000:50000--namejenkins--restart=always-v/data/jenkins_home:/var/jenkins_home-v/etc/localtime:/etc/local......
  • Docker①_VMware下载和部署_Linux
    目录1.VMware下载和部署Linux虚拟机1.1VMWare正版安装部署1.2VMWare个人安装1.3网络类型设置为桥接模式1.3.1参考配置为桥接模式1.3.2三种模式区别1.3.3VMnet1和8的IP地址的主要用途1.4配置静态ip2.常见问题解决Xshell连接虚拟机(有前面部分步骤图)Centos7静......
  • 在windows上用docker编译ceph
    Why为什么要在windows上跑docker去编译ceph的代码?是松鼠哥吃太饱了吗?当然不是~在实际生产问题处理中,很多时候会遇到棘手的情况,需要快速修改并编译得到可用的二进制程序,例如上篇中,松鼠哥处理多个osd连续的down时,就需要导出其中的一些pg,但是pg的数据导出会因为其中的一些对......
  • .net项目使用Docker部署(包括解决后台验证码,部署后不显示的问题)
    Vue部署到Docker参考文档:手把手教你用Docker部署Vue3项目_docker部署vue3项目-CSDN博客参考文档:dockerfile部署前端vue项目_vuedockerfile-CSDN博客nginx文档:使用docker安装nginx-静以修身俭以养德-博客园(cnblogs.com)结合使用了两个文档的方法和DockerFIle区别......
  • .net 8 应用在docker容器中创建失败 Failed to create CoreCLR, HRESULT: 0x80070008
    在UAT环境中docker容器里部署.net8应用没问题,在dev环境dockerrun启动失败,并报错FailedtocreateCoreCLR,HRESULT:0x80070008以下文章解决了我遇到的问题,感谢https://www.cnblogs.com/cyq1162/p/17981333处理办法增加--security-optseccomp=unconfineddockerrun-......
  • springboot+vue前后端分离项目-项目搭建15-集成JWT token权限验证
    1.对之前的代码改造,之前将user存储到sessionStorage,改成存储到localStorage,全局搜索修改 之前Result.code等于0代表success,改成200代表success,vue文件全局搜索修改一、前端部分1.改造request.js,登录时将user已经存储到localStorage里,这里将user获取到,将user里的token放到......
  • 什么是短视频矩阵系统,靠谱的矩阵系统源码搭建,oem贴牌
    抖去推AI矩阵营销系统通过多平台账号绑定、多任务创建、短视频智能剪辑、多任务多平台分发、私信评论自动回复等功能,企业可以更加轻松地管理并运维矩阵账号,实现更高效的短视频推广。一、前期准备开发环境选择您熟悉的编程语言,如Python、C++等。安装相应的开发工具,如I......
  • 靠谱的抖音短视频 SEO 矩阵系统源码开发部署----搭建流程分享
    一、需求分析在开始抖音短视频SEO矩阵系统源码的开发部署之前,首先需要明确您的业务需求和目标。例如,您希望系统具备哪些功能,是侧重于关键词优化、内容推荐还是用户行为分析等。同时,还需要考虑系统的可扩展性、稳定性以及与抖音平台的兼容性。通过多平台账号绑定、多任务创......