news 2026/1/31 2:19:55

企业内自搭建容器镜像服务-docker镜像服务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
企业内自搭建容器镜像服务-docker镜像服务

本文提供了搭建一个稳定、可复用的容器镜像服务器(私有镜像仓库),用于存储和管理 Docker 镜像,替代公共仓库(如 Docker Hub),满足内网 / 生产环境的镜像管理需求。基于最成熟的 Docker Registry 2.x,提供完整、可落地的搭建流程,包括基础部署、安全加固、客户端使用和运维技巧。

一、环境前置要求

确保你的服务器满足以下条件:

  • 操作系统:Linux(CentOS/Ubuntu/Debian 均可)
  • 已安装 Docker(版本 ≥ 20.10,安装教程可参考官方文档)
  • 开放 5000 端口(仓库默认端口,可自定义)
  • 服务器有至少 10GB 以上可用磁盘空间(存储镜像)

二、分步搭建流程

步骤 1:创建持久化目录(核心)

容器内的镜像数据默认存储在容器内部,删除容器会丢失数据,因此先创建宿主机目录挂载:

# 创建镜像存储目录mkdir-p /data/registry/images# 创建认证文件目录(后续用于密码登录)mkdir-p /data/registry/auth# 设置目录权限,避免权限不足chmod-R755/data/registry

步骤 2:配置用户认证(生产环境必选)

为仓库添加用户名密码认证,防止匿名访问:

# 安装 htpasswd 工具(生成密码文件)# CentOS/RHELyuminstall-y httpd-tools# Ubuntu/Debianaptupdate&&aptinstall-y apache2-utils# 创建管理员账号(示例:用户名 registry-admin,密码 123456Ab!)# -B:使用 bcrypt 加密(更安全);-c:创建新文件htpasswd -Bc /data/registry/auth/htpasswd registry-admin 123456Ab!# htpasswd -Bbn registry-admin 123456Ab! > auth/htpasswd# 如需添加更多用户,去掉 -c(避免覆盖):# htpasswd -B /data/registry/auth/htpasswd test-user 654321Ba!

步骤 3:启动 Registry 容器

通过 Docker 一键启动私有仓库,整合存储和认证:

dockerrun -d\--name private-registry\--restart=always\# 服务器重启后自动启动-p5000:5000\# 宿主机端口:容器端口(可改宿主机端口,如 8080:5000)-v /data/registry/images:/var/lib/registry\# 挂载镜像存储目录-v /data/registry/auth:/auth\# 挂载认证目录-e"REGISTRY_AUTH=htpasswd"\# 启用 htpasswd 认证-e"REGISTRY_AUTH_HTPASSWD_REALM=Private Registry"\# 认证提示语-e"REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"\# 密码文件路径registry:2# 官方 Registry 2.x 镜像(稳定版)

步骤 4:验证仓库是否启动成功

# 1. 查看容器状态(显示 Up 表示运行正常)dockerps|grepprivate-registry# 2. 测试未认证访问(应返回 401 未授权)curlhttp://你的服务器IP:5000/v2/_catalog# 预期输出:{"errors":[{"code":"UNAUTHORIZED","message":"authentication required"}]}# 3. 测试认证访问(替换账号密码)curl-u registry-admin:123456Ab!http://你的服务器IP:5000/v2/_catalog# 预期输出:{"repositories":[]}(空列表表示仓库已就绪,暂无镜像)

三、客户端使用私有仓库(推送 / 拉取镜像)

步骤 1:客户端配置(允许访问私有仓库)

如果仓库未配置 HTTPS(内网场景),需要在客户端(推送 / 拉取镜像的机器)添加信任:

# 编辑 Docker 配置文件vi/etc/docker/daemon.json# 添加以下内容(替换为你的仓库地址){"insecure-registries":["你的服务器IP:5000"]}# 重启 Docker 生效systemctl restartdocker

步骤 2:登录私有仓库

dockerlogin 你的服务器IP:5000# 输入步骤2创建的用户名(registry-admin)和密码,提示「Login Succeeded」即成功

步骤 3:推送镜像到私有仓库

# 1. 给本地镜像打标签(格式:仓库地址/镜像名:标签)# 示例:将本地 nginx:latest 打标签为 192.168.1.100:5000/nginx:v1dockertag nginx:latest 你的服务器IP:5000/nginx:v1# 2. 推送镜像dockerpush 你的服务器IP:5000/nginx:v1# 3. 验证推送结果(查看仓库内的镜像列表)curl-u registry-admin:123456Ab!http://你的服务器IP:5000/v2/_catalog# 预期输出:{"repositories":["nginx"]}

步骤 4:从私有仓库拉取镜像

# 1. (可选)删除本地镜像,测试拉取dockerrmi 你的服务器IP:5000/nginx:v1# 2. 拉取镜像dockerpull 你的服务器IP:5000/nginx:v1# 3. 查看拉取结果dockerimages|grepnginx

四、进阶优化(生产环境建议)

1. 配置 HTTPS(避免明文传输)

如果仓库暴露在外网,建议配置 SSL 证书(以 Let’s Encrypt 免费证书为例):

# 假设证书文件路径:/data/registry/certs/fullchain.pem(公钥)、/data/registry/certs/privkey.pem(私钥)dockerrun -d\--name private-registry\--restart=always\-p443:5000\# 改用 443 端口(HTTPS 默认端口)-v /data/registry/images:/var/lib/registry\-v /data/registry/auth:/auth\-v /data/registry/certs:/certs\-e"REGISTRY_AUTH=htpasswd"\-e"REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"\-e"REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem"\-e"REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem"\registry:2

2. 镜像清理(释放磁盘空间)

仓库运行一段时间后会产生无用镜像(如删除标签后的镜像),需定期清理:

# 进入容器执行清理命令dockerexec-it private-registry registry garbage-collect /etc/docker/registry/config.yml# 建议添加定时任务(每天凌晨 2 点清理)echo"0 2 * * * docker exec -it private-registry registry garbage-collect /etc/docker/registry/config.yml">>/var/spool/cron/root

总结

  1. 私有镜像仓库核心是基于 registry:2 镜像,通过目录挂载实现数据持久化,通过 htpasswd 实现密码认证。
  2. 客户端使用时,需先登录仓库,且镜像标签必须包含「仓库 IP: 端口」才能正常推送 / 拉取。
  3. 生产环境需开启认证,外网场景建议配置 HTTPS,同时定期清理无用镜像节省磁盘空间。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/30 0:35:32

TCP/IP协议栈全解析:从基础到未来

TCP/IP协议栈深度解析技术文章大纲引言简述TCP/IP协议栈的背景和重要性说明文章的目标和结构协议栈概述定义TCP/IP协议栈及其在互联网中的作用对比OSI模型与TCP/IP模型的异同协议栈的分层结构及各层功能简介物理层与数据链路层物理层的基础功能与常见技术数据链路层的作用及关键…

作者头像 李华
网站建设 2026/1/30 9:03:39

python基于vue的小区菜店蔬菜商城系统的设计与实现django flask pycharm

目录小区菜店蔬菜商城系统的设计与实现摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!小区菜店蔬菜商城系统的设计与实现摘要 该系统基于Python技术栈,采用前后端分离架构&…

作者头像 李华
网站建设 2026/1/30 7:47:24

python基于vue的校园教室预约综合管理系统django flask pycharm

目录基于Vue与Python的校园教室预约管理系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!基于Vue与Python的校园教室预约管理系统摘要 该系统采用前后端分离架构,前端基于…

作者头像 李华
网站建设 2026/1/29 18:03:51

纪念币预约革命:告别手动抢购的终极自动化解决方案

纪念币预约革命:告别手动抢购的终极自动化解决方案 【免费下载链接】auto_commemorative_coin_booking 项目地址: https://gitcode.com/gh_mirrors/au/auto_commemorative_coin_booking 还在为每次纪念币预约时的紧张手速而焦虑吗?auto_commemor…

作者头像 李华
网站建设 2026/1/29 18:03:55

嘎嘎降AI vs 学术猹:2026年两大热门降AI工具深度横评

嘎嘎降AI vs 学术猹:2026年两大热门降AI工具深度横评 TL;DR: 嘎嘎降AI和学术猹是目前最热门的两款降AI工具。嘎嘎降AI价格4.8元/千字、达标率99.26%、支持9个检测平台,性价比更高;学术猹是有道出品、价格8元/千字、品牌背书强。预算有限选嘎嘎…

作者头像 李华