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

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 执行所有命令。