(一)、环境
| 主机 | ip地址 | 角色 |
| Rocky1 | 192.168.40.144 | 业务容器(goapp+mysql+redis+nginx) |
| Rocky2 | 192.168.40.145 | NFS + Harbor + Prometheus+Grafana+Alertmanager |
(二)、项目描述
企业生产环境中普遍采用容器化部署+分布式存储+私有镜像仓库+全链路监控的架构模式。本项目模拟企业中小型生产架构,基于Rocky Linux 10系统,完整落地Docker镜像制作、容器服务部署、NFS共享存储持久化、容器资源配额限制、可视化运维、私有镜像仓库、Prometheus+grafana+Alertmanager全维度监控等企业核心能力,贴合真实生产运维场景,提升自己对容器技术原理的理解,加强容器技术的实操能力。
(三)、实验步骤
一、环境准备(两台都做)
1.配置静态ip地址
rocky1中: [ipv4] method=manual address1=192.168.40.144/24,192.168.40.1 dns=114.114.114.114;192.168.40.1;rocky2中: [ipv4] method=manual address1=192.168.40.145/24,192.168.40.1 dns=114.114.114.114;192.168.40.1;2.关闭防火墙和 SELinux
\# 关闭并禁用防火墙 systemctl stop firewalld systemctl disable firewalld \# 临时关闭 SELinux(当前生效) setenforce 0 \# 永久关闭 SELinux(重启后生效) sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config \# 确认防火墙状态 systemctl status firewalld3、安装 Docker 和 Compose 插件
\# 安装 yum 工具(提供 dnf config-manager 命令) dnf install -y dnf-utils \# 添加 docker 官方软件源(Rocky 10 用 rocky 目录) dnf config-manager --add-repo https://download.docker.com/linux/rocky/docker-ce.repo \# 安装 docker 全家桶 + compose 插件 dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin \# 开机自启并立即启动 systemctl enable --now docker \# 验证 docker version docker compose version二、B 机搭建 NFS 服务器
1.安装 NFS 服务端
dnf install -y nfs-utils systemctl enable --now nfs-server rpcbind2.创建共享目录 /web 并配置只读共享
\# 创建共享目录 mkdir -p /web chmod 755 /web \# 在 /web 下建好"业务数据"子目录,之后 A 机容器挂载用 mkdir -p /web/website # 放 nginx 公司介绍网站(html/图片) mkdir -p /web/goapp\_data # 放 goapp 需要读取的数据3.编辑 NFS 共享配置文件
vim /etc/exports /web 192.168.40.0/24(ro,sync,no_root_squash)4.生效并验证
\# 让 exports 配置生效 exportfs -rav \# 本机验证能不能看到自己共享的目录 showmount -e 192.168.40.145三、A 机制作 goapp 镜像
1.上传并解压 goapp 源码
mkdir -p /root/goapp \# rz上传到该文件夹后解压 cd /root/goapp unzip "go+html+mysql+redis.zip" ls2.编写Dockerfile
FROM rockylinux/rockylinux:10.0 WORKDIR /goapp COPY . /goapp EXPOSE 8080 CMD ["/goapp/goweb"]3.构建 goapp 镜像
docker build -t goapp:v1 . docker images # 能看到 goapp:v1 docker run -d --name goapp-test -p 8080:8080 goapp:v1 docker rm -f goapp-test # 测试完删掉,后面用 compose 正式启动四、A 机制作 nginx 镜像 + 自我介绍网站
1.自我介绍网站
cd /root/nginx vim index.html 在同一个目录下上传一张照片2.编写 Dockerfile
vim /root/nginx/Dockerfile FROM nginx:1.30.3 COPY . /usr/share/nginx/html/3.构建自己的nginx镜像
docker build -t mynginx:1.0 . docker images五、A 机 docker compose 启动业务(goapp + mysql + redis)
1.在 A 机挂载 B 机的 NFS
\# 创建挂载点 mkdir -p /mnt/web \# 挂载 B 机的 /web 到本地 mount -t nfs 192.168.40.145:/web /mnt/web \# 验证:能看到 B 机放的文件就成功了 ls /mnt/web \# 重启后自动挂载 echo "192.168.40.145:/web /mnt/web nfs ro,nolock 0 0" >> /etc/fstab2.编写 docker-compose.yaml
mkdir -p /root/business && cd /root/business vim docker-compose.yml3.启动并验证
cd /root/business docker compose up -d \# 查看三个容器是否都是 Up 状态 docker compose ps六、监控系统
1.A 机:部署 cadvisor(监控宿主机上所有容器)
docker run -d --name=cadvisor --restart=always \ -p 18080:8080 \ -v /:/rootfs:ro \ -v /var/run:/var/run:ro \ -v /sys:/sys:ro \ -v /var/lib/docker/:/var/lib/docker:ro \ --device=/dev/kmsg \ gcr.io/cadvisor/cadvisor:latest2.A 机:部署 node_exporter(采集主机 CPU / 内存 / 磁盘 / 网络,二进制 + 开机自启)
# ① 装 EPEL 扩展源 dnf install -y epel-release # ② 装 node_exporter dnf install -y node_exporter # ③ 启动 + 设置开机自启 systemctl enable --now node_exporter # ④ 验证 systemctl status node_exporter3.B 机:部署 Prometheus(容器)
docker run -d --name=prometheus --restart=always \ -p 9090:9090 \ -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro \ -v /opt/prometheus/rules.yml:/etc/prometheus/rules.yml:ro \ prom/prometheus4.B 机:部署 Grafana(容器)+ 配置数据源 + 导入面板
docker run -d --name=grafana --restart=always \ -p 3000:3000 \ -v /opt/grafana:/var/lib/grafana \ grafana/grafana5.可视化运维(Portainer)
七、镜像仓库:Harbor 私有仓库
1.B 机:部署 Harbor 私有仓库
cd /harbor tar -xzf harbor-offline-installer-v2.11.1.tgz cd harbor cp harbor.yml.tmpl harbor.yml vim harbor.yml ./install.sh docker ps2.A 机:把镜像推送到 Harbor
\# 1) 登录 Harbor docker login 192.168.40.145 \# 输入 admin 和密码Harbor12345 \# 2) 给镜像打上 Harbor 仓库的标签(项目名 docker-project) docker tag goapp:v1 192.168.40.145/docker-project/goapp:v1 docker tag mynginx:1.0 192.168.40.145/docker-project/mynginx:1.0 \# 3) 推送 docker push 192.168.40.145/docker-project/goapp:v1 docker push 192.168.40.145/docker-project/mynginx:1.0(四)成果展示
(五)心得体会
技术掌握:深入理解了Docker网络、数据卷、Compose编排;NFS共享存储原理;Prometheus监控体系组件协作。
能力提升:独立完成多主机联动部署,提升了架构设计及跨服务排错能力(如容器依赖、挂载权限、网络互通等)。