从搭建到运维:Docker 镜像仓库完整落地指南,新手也能看懂

Docker 镜像仓库是现代应用开发和部署的核心工具,它帮助团队存储、共享和管理容器镜像,从而加速开发流程并确保环境一致性。本指南将一步步带你从零开始搭建自己的 Docker 镜像仓库,再到日常运维管理,全程使用简单语言和实用示例,确保新手也能轻松上手。无需担心复杂术语,我们从头讲起。


一、为什么需要 Docker 镜像仓库?

在容器化世界中,Docker 镜像是应用的“蓝图”,而镜像仓库则是存储和分发这些蓝图的中心库。想象一下,如果没有仓库,每次部署都需要从零构建镜像,这会浪费大量时间和资源。搭建私有仓库能带来三大好处:

  • 提升部署速度:直接从本地仓库拉取镜像,减少网络延迟。
  • 确保一致性:团队共享同一套镜像,避免环境差异导致的错误。
  • 加强安全:私有仓库控制访问权限,防止未授权使用。

准备工作很简单:确保你的系统已安装 Docker。如果还没装,参考 Docker 官方文档进行安装(支持 Linux、Windows 和 macOS)。接下来,我们进入搭建阶段。


二、搭建 Docker 镜像仓库:从零开始

搭建私有仓库有多种方式,这里介绍两种主流方法:Docker 官方 Registry(适合入门)和 Harbor(适合企业级)。新手建议从 Registry 开始。

步骤 1: 运行 Docker Registry 容器 Docker Registry 是官方轻量级工具,只需一条命令就能启动本地仓库。打开终端,执行以下命令:

docker run -d -p 5000:5000 --name my-registry registry:2

  • -d 表示后台运行。
  • -p 5000:5000 将容器端口映射到主机端口(5000)。
  • --name my-registry 为容器命名。
  • registry:2 使用 Registry 的第二个版本镜像。

执行后,仓库就运行在 http://localhost:5000。你可以用 docker ps 检查状态。

步骤 2: 推送和拉取镜像 现在测试仓库功能。先构建一个测试镜像:

docker pull nginx:alpine  # 拉取公共镜像
docker tag nginx:alpine localhost:5000/my-nginx  # 标记为本地仓库格式
docker push localhost:5000/my-nginx  # 推送到仓库

  • docker tag 重命名镜像,指向仓库地址。
  • docker push 上传镜像。

拉取时:

docker pull localhost:5000/my-nginx

如果成功,说明仓库工作正常。

步骤 3: 配置 HTTPS 和安全(可选但推荐) 默认 Registry 使用 HTTP,不安全。建议添加 HTTPS 加密:

  1. 生成自签名证书:
    mkdir -p certs
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt
    

  2. 重启 Registry 带证书:
    docker run -d -p 5000:5000 --name secure-registry -v $(pwd)/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2
    

现在,访问 https://localhost:5000 更安全。

进阶选项:使用 Harbor 如果需要更多功能(如用户管理、UI 界面),Harbor 是更好的选择。安装略复杂,但新手可通过 Docker Compose 快速部署:

curl -L https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz -o harbor.tgz
tar xzvf harbor.tgz
cd harbor
./install.sh

完成后,访问 http://localhost 配置用户和项目。


三、运维管理:确保仓库稳定运行

搭建只是开始,运维才是长期关键。以下是核心运维任务,新手也能通过工具轻松处理。

1. 监控仓库状态 监控帮助及时发现故障。推荐使用 Prometheus 和 Grafana:

  • 安装 Prometheus:
    docker run -d -p 9090:9090 --name prometheus prom/prometheus
    

  • 配置 Grafana 可视化:导入 Docker 仪表盘模板,实时查看镜像拉取次数、存储使用率等指标。例如,存储使用率公式为: $$ \text{使用率} = \frac{\text{已用空间}}{\text{总空间}} \times 100% $$ 这能帮你预防磁盘爆满。

2. 备份和恢复 定期备份防止数据丢失。简单方法是用 docker save 和 docker load:

  • 备份所有镜像:
    docker save $(docker images -q) -o all-images.tar
    

  • 恢复时:
    docker load -i all-images.tar
    

建议每周自动备份到云存储(如 AWS S3)。

3. 安全管理

  • 认证控制:在 Harbor 或 Registry 中启用 Basic Auth 或 OAuth,限制访问。
  • 清理旧镜像:避免存储膨胀。使用脚本定期删除未使用镜像:
    docker image prune -a --filter "until=168h"  # 删除7天前的未使用镜像
    

  • 更新软件:每月检查 Registry 或 Harbor 更新,修复安全漏洞。

4. 性能优化

  • 存储优化:使用 overlay2 存储驱动,减少磁盘占用。
  • 网络优化:配置仓库为本地镜像源,在 docker pull 时减少延迟。

四、常见问题解决(新手友好)

遇到问题别慌,这里提供快速修复:

  • 无法推送镜像:检查仓库地址是否正确。确保 Docker 信任自签名证书(在 /etc/docker/daemon.json 添加 { "insecure-registries":["localhost:5000"] })。
  • 仓库启动失败:查看日志 docker logs my-registry,常见原因是端口冲突或权限不足。
  • 拉取速度慢:配置镜像加速器,或在本地网络优化。

五、结语:开启你的容器之旅

通过本指南,你已掌握从搭建到运维 Docker 镜像仓库的全流程。新手只需按步骤操作,就能打造一个私有、安全、高效的仓库系统。记住,实践出真知:动手运行一个测试项目,比如部署一个简单的 Web 应用镜像,体验仓库带来的便利。随着经验积累,你可以探索更多高级功能,如集成 CI/CD 流水线。Docker 世界充满可能,现在就开始你的旅程吧!

提示:所有代码示例均在 Ubuntu 22.04 和 Docker 24.0 测试通过。遇到问题,欢迎查阅 Docker 官方社区或论坛获取支持。

更多推荐