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,否则无法完成镜像拉取与访问测试。
- 基础 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 客户端拉取私有仓库镜像
- client 节点同步配置 daemon.json 不安全仓库并重启 Docker;
- (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 执行所有命令。
