当前位置: 首页 > news >正文

CentOS7 Docker 离线部署 + Registry 私有仓库完整实操

摘要

本次容器云实训分为两大实操阶段,搭建双节点环境:server 主机 10.62.3.137 部署 Docker 与私有镜像仓库,client 客户端完成镜像拉取与 Web 服务验证。全程采用离线镜像包完成部署,覆盖 Docker 安装、镜像管理、容器生命周期操作、私有仓库搭建、镜像推送拉取全流程。文中记录实操命令、参数原理、实操踩坑点与个人学习收获,作为课程实训作业记录。

一、实训环境概况

操作系统:CentOS 7 x86_64

两台实训节点:

server 节点:IP 10.62.3.137,承载 Docker 服务、Registry 私有仓库、httpd 镜像存储

client 客户端节点:用于访问容器服务、拉取私有仓库镜像

离线资源包:paas.iso 内置 docker-ce 离线安装包、httpd-2.2.32.tar 镜像;额外提供 registry.tar 私有仓库镜像文件

实训分为两大模块:Docker 基础容器操作、本地私有镜像仓库搭建与镜像分发

二、阶段一:Docker CE 离线安装与 httpd 容器实操

1.本地离线安装 Docker 社区版

依托本地 paas.iso 本地软件源离线安装 docker-ce,无需外网环境:

# 执行离线安装命令

yum install -y docker-ce

# 启动Docker并设置开机自启

systemctl start docker

systemctl enable docker

实操注意:ISO 内置 Docker 版本偏老旧,可卸载后在线安装新版;client 客户端必须同步安装 Docker,否则无法完成镜像拉取与访问测试。

  1. 基础 Docker 信息查询

刚安装完成无镜像、无运行容器,执行以下命令

# 查看Docker全局详细信息

docker info

# 查看客户端与服务端版本信息

docker version

# 查看当前运行容器

docker ps

# 查看本地存储镜像

docker images

3.导入离线 httpd 镜像包

实训资源已提前将 httpd 镜像文件放置 /opt/paas/images 目录,直接加载镜像:

# 导入tar格式离线镜像

docker load -i /opt/paas/images/httpd-2.2.32.tar

# 查看导入后的镜像,记录IMAGE ID前四位

docker images

4.创建后台运行 httpd Web 容器

通过 docker run 创建持久运行的 Web 容器,配置端口映射与重启策略:

docker run -d --restart=unless-stopped -p 8080:80 镜像ID前四位

参数通俗解读:

-d:后台守护模式启动容器,不占用终端窗口,适合长期运行 Web 服务

--restart=unless-stopped:服务自愈策略,Docker 服务重启自动拉起容器;手动停止容器后不再自动重启

-p 宿主机端口:容器内部端口:端口转发规则,外部访问 10.62.3.137:8080,流量转发至容器内 80 端口

执行后用docker ps查看运行容器,记录容器 ID 用于后续操作。

5.Client 节点访问 httpd 服务验证

客户端执行 curl 命令测试连通性:

curlhttp://server:8080

也可在物理机浏览器访问地址 http://10.62.3.137:8080,页面输出It works!即代表 Web 容器部署成功。

6.交互式进入容器内部操作

通过 exec 命令进入容器终端,查看容器内部系统与网络环境:

docker exec -it 容器ID前四位 bash

# 容器内依次执行命令

uname -a # 查看容器内核系统信息

ip address # 查看容器独立虚拟网卡

ls -l

cd bin

httpd # 手动启动httpd服务程序

exit # 退出容器终端,容器持续后台运行

7.停止并删除容器

实操容器生命周期管理,区分运行 / 停止容器删除规则:

# 停止正在运行的容器

docker stop 容器ID

# 确认容器已停止

docker ps

# 删除停止状态的容器

docker rm 容器ID

CentOS7 Docker 离线部署 + Registry 私有仓库完整实操

补充实操问题:直接删除运行中的容器会报错,如需强制清理可使用docker rm -f 容器ID

  • 阶段二:搭建本地 Registry 私有镜像仓库

1.上传并加载 registry 仓库镜像

使用 SFTP 工具将离线 registry.tar 上传至 server 节点 /opt/images 目录(无目录手动 mkdir 创建),加载镜像:

docker load -i /opt/images/registry.tar

docker images

2.启动私有仓库容器并验证服务

挂载本地目录持久化镜像数据,启动 Registry 仓库:

docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

参数说明:

-v 数据卷挂载:宿主机 /opt/registry 存储镜像,删除仓库容器镜像不会丢失

--restart=always 无论异常退出还是手动关闭,都会自动重启仓库服务

验证仓库是否正常启动

curl -v http://server:5000/v2

3.配置非安全 HTTP 私有仓库

Docker 默认仅信任 HTTPS 加密仓库,本地内网仓库需配置放行不安全地址,server 与 client 两端都要操作:

tee /etc/docker/daemon.json > /dev/null <<'EOF'

{

"insecure-registries": [

"server:5000"

]

}

EOF

# 重载系统配置,重启Docker服务生效

systemctl daemon-reload

systemctl restart docker

4.镜像打标签、推送至私有仓库

镜像推送前必须打上私有仓库地址前缀标签,格式为仓库地址:端口/镜像名:版本:

# 给仓库镜像、httpd镜像打私有仓标签

docker tag registry server:5000/registry

docker tag httpd:2.2.32 server:5000/httpd:2.2.32

# 推送镜像至本地私有仓库

docker push server:5000/registry

docker push server:5000/httpd:2.2.32

# 查询仓库内存储的全部镜像

curl http://server:5000/v2/_catalog

返回{"repositories":["httpd","registry"]}代表镜像推送成功。

5. Client 客户端拉取私有仓库镜像

  1. client 节点同步配置 daemon.json 不安全仓库并重启 Docker;
  2. (2)查询仓库镜像与版本标签:

# 查看仓库所有镜像

curl http://server:5000/v2/_catalog

# 查看httpd镜像可用版本tag

curl http://server:5000/v2/httpd/tags/list

# 拉取私有仓库httpd镜像至本地

docker pull server:5000/httpd:2.2.32

# 查看本地镜像,复用阶段一流程创建、访问容器验证可用性

docker images

实训实操踩坑总结

1.镜像推拉报错:仅配置 server 端 daemon.json,忘记同步修改 client 节点,导致客户端无法访问 http 私有仓库;

2.Web 服务无法访问:端口映射前后顺序颠倒、防火墙未开放 8080/5000 端口,外部无法连通容器;

3.仓库镜像丢失:启动 registry 容器未添加 - v 数据卷挂载,删除容器后全部镜像清空;

4.删除容器失败:docker rm 仅支持删除停止状态容器,运行容器需先 stop 或加 - f 强制删除;

5.客户端域名解析失败:无法识别 server 主机名,可直接替换 IP 10.62.3.137 执行所有命令。

http://www.jsqmd.com/news/1091200/

相关文章:

  • 微信小程序安全审计实战:使用小锦哥进行自动化漏洞检测与深度防御
  • 日本风情lr预设|日系清新旅行人像海边街拍Lightroom下载lr调色风格
  • Python+Selenium端到端自动化测试实战:从POM设计到CI/CD集成
  • BerriAI/LiteLLM 开源项目深度解析:实现多模型统一调用、负载均衡与成本管理的标准化 API 代理实战指南
  • Defender Control完整指南:如何在Windows 10/11中永久禁用Windows Defender
  • ECCV 2026 | 从静态拟合到动态分配:AMG-Fuse 用模态贡献Mask破解恶劣天气下的融合难题
  • 永不消亡的“数字幽灵”:为什么都2026年了,这个30年前的漏洞依然无处不在?
  • Netcatty 开源跨平台 SSH 运维客户端完整技术实操指南
  • 5分钟掌握MGit:Android平台最强大的Git客户端全解析
  • 优选冰雪传奇点卡版!原汁原味复古设定,打造纯净开荒体验
  • 打破苹果生态壁垒:3步让Windows电脑成为AirPlay 2投屏中心
  • W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
  • 【云原生与DevOps】01-Docker从入门到实践:镜像、容器、网络三位一体
  • 我把整个代码库喂给 Claude Code,工具超 50 个就静默丢失,这个坑太阴了
  • 2.1 告别“单体应用”:为什么你的记账和炒股混在一起就是灾难
  • 大模型幻觉怎么治?引用溯源兜底实操
  • PostgreSQL 索引里到底存了什么?
  • MSP430FR5969 LaunchPad开发板:FRAM与超低功耗设计实战指南
  • SpringBoot 配置文件详细指南
  • 用 OllamaHub 让 Visual Studio Copilot 可以对接任意模型
  • 超链接以字段(Field) 的形式存储。每个超链接字段包含两个核心部分:
  • 德州仪器DRV2667压电触觉驱动器评估与开发全攻略
  • 2026高考志愿资料(本科+专科)免费分享
  • 工业互联网组建与维护全域学习总结、技术体系探究与行业未来发展就业全景分析
  • 很多人一提到“省钱”,第一反应就是别用最新模型。但从一条真实的开发账单看,影响成本的关键,未必只是模型新不新,而是这次请求里有没有把缓存价值吃满。
  • Shell 脚本从入门到写出第一个自动化脚本
  • 【WorkBuddy专栏50】代码开发技术体系深度分析——前端、后端、全栈、移动端、数据工程,WB和CODEBUDDY谁更擅长?
  • Win11Debloat:如何用4个步骤让Windows 11运行速度快65%?
  • 第01篇:从一颗芯片看透智能座舱——座舱MCU的“世界观”
  • 基于物联网、时序模型、大模型和智能问数,设备预测性维护【智能体】应用案例