快速搭建 Docker Registry(轻量型)
Docker Registry 是官方提供的基础镜像仓库工具,适合个人或小型团队快速搭建本地仓库。
1. 前提条件
已安装 Docker(安装教程)。
确保 Docker 服务正常运行:
systemctl status docker
(Linux)或docker info
(验证是否正常工作)。
2. 启动本地 Registry 容器
直接通过 Docker 镜像启动 Registry,默认使用 HTTP 协议(生产环境建议配置 HTTPS):
bash
# 启动 Registry,映射容器 5000 端口到主机 5000 端口,数据存储在主机的 /opt/registry 目录
docker run -d \
--name local-registry \
-p 5000:5000 \
-v /opt/registry:/var/lib/registry \ # 数据持久化到本地目录
--restart=always \ # 开机自启
registry:2 # 使用官方 Registry 镜像(版本 2)
验证是否启动成功:
docker ps | grep local-registry
,若能看到容器信息则启动成功。
3. 配置客户端信任(HTTP 场景必做)
由于 Registry 默认使用 HTTP,Docker 客户端默认拒绝访问非 HTTPS 的仓库,需配置信任:
Linux 客户端配置:
bash
# 编辑 Docker 配置文件(若不存在则创建)
sudo vim /etc/docker/daemon.json
# 添加以下内容(IP 替换为 Registry 所在主机的 IP,端口保持 5000)
{
"insecure-registries": ["192.168.1.100:5000"]
}
# 重启 Docker 服务使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
Windows/macOS 客户端配置:
通过 Docker Desktop 图形界面:
Settings -> Docker Engine
,在配置中添加上述insecure-registries
字段,重启 Docker 即可。
4. 测试仓库:推送 / 拉取镜像
bash
# 1. 给本地镜像打标签(格式:仓库IP:端口/镜像名:版本)
# 示例:将本地的 nginx 镜像标记为仓库中的镜像
docker tag nginx:latest 192.168.1.100:5000/my-nginx:v1
# 2. 推送到本地仓库
docker push 192.168.1.100:5000/my-nginx:v1
# 3. 从仓库拉取镜像(可在其他客户端执行,需先配置信任)
docker pull 192.168.1.100:5000/my-nginx:v1
# 4. 查看仓库中的镜像列表(通过 API)
curl http://192.168.1.100:5000/v2/_catalog
# 输出示例:{"repositories":["my-nginx"]}
方案二:搭建 Harbor 仓库(企业级)
Harbor 提供用户权限管理、镜像安全扫描等企业级功能,适合团队或生产环境。
1. 前提条件
安装 Docker 和 Docker Compose(或 Docker Compose V2):
bash
# 安装 Docker(略,参考官方文档) # 安装 Docker Compose(以 Linux 为例) sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version # 验证安装
2. 下载并配置 Harbor
bash
# 1. 下载 Harbor 安装包(最新版本可从官网获取:https://github.com/goharbor/harbor/releases)
wget https://github.com/goharbor/harbor/releases/download/v2.9.1/harbor-offline-installer-v2.9.1.tgz
# 2. 解压并进入目录
tar -zxvf harbor-offline-installer-v2.9.1.tgz
cd harbor
# 3. 复制配置模板并修改
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
# 关键配置项(根据需求修改):
# - hostname: 仓库的域名或IP(如 192.168.1.100)
# - http.port: HTTP 端口(默认 80,可修改)
# - harbor_admin_password: 管理员密码(默认 Harbor12345)
# - data_volume: 数据存储目录(默认 /data,建议修改为大空间目录)
3. 安装并启动 Harbor
bash
# 1. 预处理(生成配置文件)
sudo ./prepare
# 2. 安装并启动(使用 Docker Compose 部署)
sudo ./install.sh
# 3. 验证启动状态(查看容器)
sudo docker-compose ps
# 若所有容器状态为 Up,则启动成功
4. 访问与使用 Harbor
Web 界面:在浏览器访问
http://192.168.1.100
(替换为配置的 hostname),使用管理员账号admin
和配置的密码登录。创建项目:登录后创建一个项目(如
my-project
),用于隔离镜像。推送镜像:
bash
# 1. 登录 Harbor(输入用户名密码) docker login 192.168.1.100 # 2. 给镜像打标签(格式:仓库IP/项目名/镜像名:版本) docker tag nginx:latest 192.168.1.100/my-project/my-nginx:v1 # 3. 推送镜像 docker push 192.168.1.100/my-project/my-nginx:v1
然后试着使用ssl 证书
一、通用准备:生成 SSL 证书
HTTPS 依赖 SSL 证书验证身份,需先获取证书。测试场景可用自签证书,生产环境必须使用 CA 签发证书(如 Let’s Encrypt、企业内部 CA 等)。此处以「自签证书」为例(适合本地测试)。
1. 生成自签证书(OpenSSL 工具)
确保本地安装 openssl
(Linux/macOS 自带,Windows 需手动安装),执行以下命令(将 your-registry-domain.com
替换为仓库的域名 / IP,如 192.168.1.100
或 registry.local
):
bash
# 1. 创建证书存储目录(后续仓库会用到)
mkdir -p /etc/docker/certs.d/your-registry-domain.com:443
# 2. 生成私钥(无密码,测试用;生产建议加密码)
openssl genrsa -out /etc/docker/certs.d/your-registry-domain.com:443/registry.key 2048
# 3. 生成证书签名请求(CSR),按提示填写信息,核心是「Common Name (CN)」需与仓库域名/IP一致
openssl req -new -key /etc/docker/certs.d/your-registry-domain.com:443/registry.key -out /etc/docker/certs.d/your-registry-domain.com:443/registry.csr
# 4. 生成自签证书(有效期 365 天)
openssl x509 -req -days 365 -in /etc/docker/certs.d/your-registry-domain.com:443/registry.csr -signkey /etc/docker/certs.d/your-registry-domain.com:443/registry.key -out /etc/docker/certs.d/your-registry-domain.com:443/registry.crt
生成后会得到 3 个文件:
registry.key
:私钥(仓库服务端使用,需保密)registry.crt
:公钥证书(仓库服务端 + 客户端信任使用)registry.csr
:签名请求文件(生成证书后可删除)
二、方案 1:Docker Registry 配置 HTTPS
Docker Registry 是轻量级本地仓库,通过容器启动,调整 HTTPS 需在启动命令中指定证书路径。
1. 停止现有 HTTP 仓库(若已启动)
bash
docker stop local-registry
docker rm local-registry
2. 以 HTTPS 模式启动仓库
核心是通过 -v
挂载证书目录,并通过 -e
指定证书文件名:
bash
docker run -d \
--name local-registry \
--restart=always \
-p 443:443 \ # HTTPS 默认端口 443(若用其他端口,需同步修改证书目录和客户端配置)
-v /etc/docker/certs.d/your-registry-domain.com:443:/certs \ # 挂载证书到容器内 /certs 目录
-v registry-data:/var/lib/registry \ # 挂载仓库数据目录(避免容器删除后数据丢失)
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ # 仓库监听 HTTPS 端口
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt \ # 容器内证书路径
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.key \ # 容器内私钥路径
registry:2 # Registry 镜像(默认最新版,建议指定具体版本如 registry:2.8)
3. 客户端信任证书(关键)
自签证书默认不被 Docker 信任,需在所有要访问仓库的客户端机器上配置信任:
bash
# 1. 在客户端创建仓库域名对应的证书目录(端口需与仓库一致,如 443)
mkdir -p /etc/docker/certs.d/your-registry-domain.com:443
# 2. 将服务端的 registry.crt 复制到客户端该目录(可通过 scp 或手动拷贝)
scp root@your-registry-ip:/etc/docker/certs.d/your-registry-domain.com:443/registry.crt /etc/docker/certs.d/your-registry-domain.com:443/
# 3. 重启 Docker 服务使配置生效
systemctl restart docker # Linux
# 或(Windows PowerShell 管理员模式)
Restart-Service Docker
# 或(macOS)
sudo killall -HUP com.docker.docker
4. 验证 HTTPS 访问
bash
# 1. 登录仓库(无密码默认登录成功,生产需配置认证)
docker login your-registry-domain.com:443
# 2. 推送测试镜像(如将 nginx 镜像打标签后推送)
docker pull nginx
docker tag nginx your-registry-domain.com:443/test-nginx:v1
docker push your-registry-domain.com:443/test-nginx:v1
# 3. 拉取镜像验证
docker rmi your-registry-domain.com:443/test-nginx:v1
docker pull your-registry-domain.com:443/test-nginx:v1
三、方案 2:Harbor 配置 HTTPS
Harbor 是企业级仓库(自带 UI、认证、权限管理),配置 HTTPS 需修改其核心配置文件 harbor.yml
。
1. 停止现有 Harbor 服务(若已启动)
bash
cd /path/to/harbor # Harbor 安装目录
docker-compose down -v
2. 修改 Harbor 配置文件 harbor.yml
打开安装目录下的 harbor.yml
,找到 https
相关配置,替换为实际证书路径和域名:
yaml
# 注释或删除 http 配置(可选,强制 HTTPS)
# http:
# port: 80
# 启用 HTTPS 配置
https:
port: 443 # HTTPS 默认端口
certificate: /etc/docker/certs.d/your-registry-domain.com:443/registry.crt # 公钥证书路径(本地绝对路径)
private_key: /etc/docker/certs.d/your-registry-domain.com:443/registry.key # 私钥路径(本地绝对路径)
3. 重新生成 Harbor 配置并启动
bash
# 1. 清理旧配置(若之前启动过 HTTP 模式)
rm -rf /path/to/harbor/common/config/nginx/ssl # 清理旧 SSL 配置
# 2. 重新生成配置文件
./prepare
# 3. 启动 Harbor(后台运行)
docker-compose up -d
4. 客户端信任证书(同 Docker Registry)
将服务端的 registry.crt
复制到客户端的 /etc/docker/certs.d/your-registry-domain.com:443/
目录,重启 Docker 服务。
5. 验证 HTTPS 访问
Web UI 验证:浏览器访问
https://your-registry-domain.com:443
,能正常打开 Harbor 登录页(无证书警告),说明 HTTPS 生效。命令行验证:同 Docker Registry 的
docker login/push/pull
操作,确认镜像能正常传输。
关键注意事项
证书一致性:证书的「Common Name (CN)」必须与仓库的访问域名 / IP 完全一致,否则会报「证书域名不匹配」错误。
生产环境证书:自签证书仅用于测试,生产环境需使用 CA 签发证书(如 Let’s Encrypt 可免费申请,通过
certbot
工具自动生成)。端口映射:若不使用默认 443 端口(如 8443),需在证书目录、
harbor.yml
、客户端配置中同步指定端口(如your-registry-domain.com:8443
)。客户端信任:所有需要访问仓库的机器(如开发机、服务器)都必须配置证书信任,否则 Docker 无法正常拉取 / 推送镜像。