news 2026/4/19 17:54: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/4/18 22:28:01

FlashMLA 加速推理技术

来源: https://developer.aliyun.com/article/1653387 代码:https://github.com/deepseek-ai/FlashMLAFlashMLA 简介 FlashMLA 是一款专为 NVIDIA Hopper 架构 GPU 优化的高效 MLA(Multi-Head Linear Attention)解码内核&#xff…

作者头像 李华
网站建设 2026/4/18 1:24:37

将QtNodes添加到Qt项目中

文章目录背景和思路步骤背景和思路 最近想开发一个基于Node编辑的SOMEIP编辑器。因此需要将QtNodes项目引入到自己的项目中。 思路是将QtNodes作为submodule添加到自己git仓库中。 步骤 将QtNodes作为submodule加入到git仓库。下面指令将QtNodes引入到自己项目的“3rdparty/…

作者头像 李华
网站建设 2026/4/19 2:59:55

强烈安利10个AI论文网站,MBA论文写作必备!

强烈安利10个AI论文网站,MBA论文写作必备! AI 工具如何助力 MBA 论文写作? 在当前的学术环境中,MBA 学员们正面临越来越高的论文写作要求。无论是选题、结构搭建,还是内容撰写与降重,每一个环节都对学生的专…

作者头像 李华
网站建设 2026/4/18 6:53:49

python基于vue的校园电影网站的设计与实现django flask pycharm

目录校园电影网站的设计与实现摘要系统功能模块技术实现与优化总结开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!校园电影网站的设计与实现摘要 设计并实现一个基于Vue.js前端框架与Pytho…

作者头像 李华
网站建设 2026/4/19 2:59:54

Linux日志管理与分析实战:从轮转到集中收集

前言 日志是排查问题的第一手资料。但日志管理不好,要么磁盘被占满,要么关键时刻找不到日志。Linux提供了logrotate、journald等工具管理日志,但在分布式环境下,还需要集中收集和分析。 这篇文章从单机日志管理到集中收集方案&…

作者头像 李华
网站建设 2026/4/19 2:58:31

学长学姐私藏:6款免费降AI工具实测分享,省下几百块

学长学姐私藏:6款免费降AI工具实测分享,省下几百块 TL;DR:想降AI率又不想花太多钱?这篇是真正帮你省钱的干货。实测6款有免费额度的降AI工具,其中嘎嘎降AI(免费1000字)和比话降AI效果最好&#…

作者头像 李华