翼度科技»论坛 云主机 服务器技术 查看内容

Docker搭建私有化仓库的几种方法

6

主题

6

帖子

18

积分

新手上路

Rank: 1

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

  • 提高安全性:镜像存储在受控的环境中。
  • 提升效率:在公司网络内传输镜像,速度更快。
  • 实现自动化:配合 CI/CD 系统实现自动镜像管理。
本文将详细介绍如何在不同环境下搭建 Docker 私有化仓库,并提供配置和优化建议。

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

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

Registry 与 Repository


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


镜像标签


  • Tag:是一个指向镜像的标签,如
    1. nginx:latest
    复制代码


二、搭建 Docker 私有化仓库


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

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

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

首先,拉取官方 Registry 镜像并运行:
  1. docker pull registry:2
复制代码
运行私有化仓库:
  1. docker run -d -p 5000:5000 --name my-registry registry:2
复制代码

    1. -d
    复制代码
    :后台运行容器。
    1. -p 5000:5000
    复制代码
    :将主机的 5000 端口映射到容器的 5000 端口。
    1. --name my-registry
    复制代码
    :为容器命名为
    1. my-registry
    复制代码


2. 推送镜像到私有化仓库

将本地镜像推送到私有化仓库:
给镜像打标签:
  1. docker tag <IMAGE_ID> localhost:5000/my-image:latest
复制代码
例如:
  1. docker tag ubuntu:latest localhost:5000/ubuntu:latest
复制代码
推送镜像到私有仓库:
  1. docker push localhost:5000/ubuntu:latest
复制代码
3. 从私有化仓库拉取镜像

在其他 Docker 主机上,从私有化仓库拉取镜像:
  1. docker pull localhost:5000/ubuntu:latest
复制代码
注意:在其他机器上访问私有仓库时,需要将
  1. localhost
复制代码
替换为私有仓库所在机器的 IP 地址或域名。

4. 验证仓库中的镜像

使用
  1. curl
复制代码
验证仓库中存储的镜像:
  1. curl http://localhost:5000/v2/_catalog
复制代码
返回结果:
  1. {
  2.   "repositories": [
  3.     "ubuntu"
  4.   ]
  5. }
复制代码
5. 使用 docker-compose 启动私有仓库

你可以使用
  1. docker-compose
复制代码
来简化启动过程:
  1. version: '3'

  2. services:
  3.   registry:
  4.     image: registry:2
  5.     ports:
  6.       - "5000:5000"
  7.     volumes:
  8.       - ./data:/var/lib/registry
复制代码
运行
  1. docker-compose
复制代码
  1. docker-compose up -d
复制代码
方法二:使用 Harbor 搭建企业级私有仓库

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

1. 安装 Docker 和 Docker Compose

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

2. 下载 Harbor 安装包

访问 Harbor 官方下载页面 下载最新版本。
  1. wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz
复制代码
解压安装包:
  1. tar xzvf harbor-online-installer-v2.9.0.tgz
  2. cd harbor
复制代码
3. 配置 Harbor

  1. harbor
复制代码
目录下,有一个
  1. harbor.yml
复制代码
配置文件。根据需要进行配置:
  1. hostname: reg.mycompany.com  # 修改为你的域名或IP

  2. https:
  3.   port: 443
  4.   certificate: /your/certificate/path
  5.   private_key: /your/private/key/path

  6. harbor_admin_password: Harbor12345  # 设置管理员密码
复制代码
注意:确保使用正确的域名和证书路径。可以通过 Let’s Encrypt 获取免费 SSL 证书。

4. 安装和启动 Harbor

执行以下命令安装和启动 Harbor:
  1. ./install.sh
复制代码
启动 Harbor 服务:
  1. docker-compose up -d
复制代码
5. 访问 Harbor Web UI

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


6. 推送镜像到 Harbor

登录 Harbor:
  1. docker login reg.mycompany.com
复制代码
给镜像打标签:
  1. docker tag <IMAGE_ID> reg.mycompany.com/myproject/my-image:latest
复制代码
推送镜像到 Harbor:
  1. docker push reg.mycompany.com/myproject/my-image:latest
复制代码
7. 从 Harbor 拉取镜像

在其他机器上,登录 Harbor 并拉取镜像:
  1. docker login reg.mycompany.com
  2. docker pull reg.mycompany.com/myproject/my-image:latest
复制代码
方法三:使用 GitLab Container Registry

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

1. 安装 GitLab

参考 GitLab 官方文档 安装 GitLab。

2. 启用 Container Registry

编辑 GitLab 配置文件
  1. /etc/gitlab/gitlab.rb
复制代码
,启用 Registry:
  1. registry_external_url 'https://registry.mycompany.com'
复制代码
重新配置 GitLab:
  1. gitlab-ctl reconfigure
复制代码
3. 登录 GitLab Container Registry
  1. docker login registry.mycompany.com
复制代码
4. 推送镜像到 GitLab Container Registry

给镜像打标签:
  1. docker tag <IMAGE_ID> registry.mycompany.com/mygroup/myproject/my-image:latest
复制代码
推送镜像:
  1. docker push registry.mycompany.com/mygroup/myproject/my-image:latest
复制代码
5. 从 GitLab Container Registry 拉取镜像
  1. docker pull registry.mycompany.com/mygroup/myproject/my-image:latest
复制代码
三、配置私有化仓库的安全性


1. 使用 HTTPS 保护传输

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

生成自签名证书

使用
  1. openssl
复制代码
生成自签名证书:
  1. mkdir -p certs
  2. openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
复制代码
生成过程会提示输入信息,如下所示:
  1. Country Name (2 letter code) [AU]:CN
  2. State or Province Name (full name) [Some-State]:Guangdong
  3. Locality Name (eg, city) []:Shenzhen
  4. Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
  5. Organizational Unit Name (eg, section) []:IT
  6. Common Name (e.g. server FQDN or YOUR name) []:localhost
  7. Email Address []:admin@example.com
复制代码
将证书挂载到容器中:
  1. docker run -d -p 5000:5000 --name my-registry \
  2.   -v `pwd`/certs:/certs \
  3.   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  4.   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  5.   registry:2
复制代码
2. 配置认证访问

Docker 私有化仓库支持使用基础认证(Basic Auth)保护访问。
创建用户和密码文件
使用
  1. htpasswd
复制代码
创建用户和密码文件:
  1. apt-get install apache2-utils -y
  2. htpasswd -cB htpasswd myuser
复制代码

    1. myuser
    复制代码
    :用户名。
  • 你会被提示输入密码并确认。
启动带认证的 Registry
将认证文件挂载到容器中:
  1. docker run -d -p 5000

  2. :5000 --name my-registry \
  3.   -v `pwd`/certs:/certs \
  4.   -v `pwd`/auth:/auth \
  5.   -e "REGISTRY_AUTH=htpasswd" \
  6.   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  7.   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  8.   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  9.   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  10.   registry:2
复制代码
3. 配置防火墙

为确保私有化仓库的安全性,建议配置防火墙规则,仅允许特定的 IP 或子网访问仓库。
  1. # 允许 192.168.1.0/24 子网访问
  2. iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 5000 -j ACCEPT

  3. # 拒绝其他 IP 访问
  4. iptables -A INPUT -p tcp --dport 5000 -j DROP
复制代码
四、管理和监控私有化仓库


1. 查看仓库中的镜像

使用
  1. curl
复制代码
查看仓库中的镜像:
  1. curl -u myuser:mypassword https://localhost:5000/v2/_catalog
复制代码
2. 查看镜像标签

查看指定镜像的标签:
  1. curl -u myuser:mypassword https://localhost:5000/v2/<repository>/tags/list
复制代码
例如:
  1. curl -u myuser:mypassword https://localhost:5000/v2/ubuntu/tags/list
复制代码
3. 删除镜像

删除指定镜像的标签:
  1. curl -X DELETE -u myuser:mypassword https://localhost:5000/v2/<repository>/manifests/<digest>
复制代码
获取
  1. digest
复制代码
  1. curl -u myuser:mypassword -I -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
  2. https://localhost:5000/v2/<repository>/manifests/<tag>
复制代码
例如:
  1. curl -u myuser:mypassword -I -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
  2. https://localhost:5000/v2/ubuntu/manifests/latest
复制代码
4. 配置镜像清理策略

定期清理不再使用的镜像和标签,节省存储空间。可以使用 Registry GC 工具。
停止 Registry:
  1. docker stop my-registry
复制代码
运行垃圾回收:
  1. docker run --rm -v /var/lib/registry:/var/lib/registry registry:2 garbage-collect /etc/docker/registry/config.yml
复制代码
重启 Registry:
  1. docker start my-registry
复制代码
5. 使用监控工具

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

五、常见问题和解决方案


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


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

2. 推送镜像失败


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

3. 镜像拉取速度慢


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

总结

通过本文的介绍,你应该已经掌握了搭建 Docker 私有化仓库的基本步骤和配置方法。无论是使用官方的 Docker Registry 镜像,还是更强大的 Harbor 或 GitLab Container Registry,私有化仓库都能为你的镜像管理带来更高的安全性和效率。
到此这篇关于Docker搭建私有化仓库的实现步骤的文章就介绍到这了,更多相关Docker 私有化仓库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/server/326620h7d.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具