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

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/
目录一、Docker 私有化仓库的基本原理Registry 与 Repository镜像标签二、搭建 Docker 私有化仓库方法一:使用 Docker 官方 Registry 镜像1. 拉取并运行官方 Registry 镜像2. 推送镜像到私有化仓库3. 从私有化仓库拉取镜像4. 验证仓库中的镜像5. 使用 docker-compose 启动私有仓库方法二:使用 Harbor 搭建企业级私有仓库1. 安装 Docker 和 Docker Compose2. 下载 Harbor 安装包3. 配置 Harbor4. 安装和启动 Harbor5. 访问 Harbor Web UI6. 推送镜像到 Harbor7. 从 Harbor 拉取镜像方法三:使用 GitLab Container Registry1. 安装 GitLab2. 启用 Container Registry3. 登录 GitLab Container Registry4. 推送镜像到 GitLab Container Registry5. 从 GitLab Container Registry 拉取镜像三、配置私有化仓库的安全性1. 使用 HTTPS 保护传输生成自签名证书2. 配置认证访问3. 配置防火墙四、管理和监控私有化仓库1. 查看仓库中的镜像2. 查看镜像标签3. 删除镜像4. 配置镜像清理策略5. 使用监控工具五、常见问题和解决方案1. Docker 客户端无法连接私有仓库2. 推送镜像失败3. 镜像拉取速度慢总结

搭建 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. 推送镜像到私有化仓库

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

给镜像打标签:

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

例如:

docker tag ubuntu:latest localhost:5000/ubuntu:latest

推送镜像到私有仓库:

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

登录 Harbor:

docker login reg.mycompany.com

给镜像打标签:

docker tag <IMAGE_ID> reg.mycompany.com/myproject/my-image:latest

推送镜像到 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

给镜像打标签:

docker tag <IMAGE_ID> registry.mycompany.com/mygroup/myproject/my-image:latest

推送镜像:

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 []:admin@example.com

将证书挂载到容器中:

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 工具。

停止 Registry:

docker stop my-registry

运行垃圾回收:

docker run –rm -v /var/lib/registry:/var/lib/registry registry:2 garbage-collect /etc/docker/registry/config.yml

重启 Registry:

docker start my-registry

5. 使用监控工具

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

五、常见问题和解决方案

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

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

2. 推送镜像失败

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

3. 镜像拉取速度慢

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

总结

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


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容