搭建 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,私有化仓库都能为你的镜像管理带来更高的安全性和效率。
到此这篇关于docker搭建私有化仓库的实现步骤的文章就介绍到这了,更多相关docker 私有化仓库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论