🚀 一次测试环境的探索:我如何将 CDH 集群打包成 Docker 镜像,留给未来的自己
🧩 背景故事
最近在项目中,我们计划上线一个基于 CDH(Cloudera Distribution Hadoop) 的大数据平台。正式上生产环境之前,我被安排在测试环境先搭建一套完整的 CDH 集群做功能验证与调优。
当一切配置跑通后,我意识到一个问题:
既然花了这么大力气把 CDH 集群搭建成功了,为什么不把它打包起来,未来不论是重建、迁移、分享、还是快速启动一套环境,都能一步到位?
于是,我决定将运行中的 CDH 集群容器 打包成镜像,留给未来的我和团队使用。
🧱 准备阶段:集群容器已经搭建成功
我在测试环境中,通过 docker-compose
启动了以下几个容器:
cloudera-manager
(CM 管理端)cdh-node1
(Worker 节点)cdh-node2
(Worker 节点)
经过配置后,这些节点已经通过 Cloudera Manager 成功部署了 HDFS、YARN、Zookeeper、Hive 等组件,整个环境运行稳定。
下一步,就是把这些容器打包成镜像。
🧰 正式开始:将容器打包为镜像
① 查看当前运行的容器
bash
docker ps
输出类似:
CONTAINER ID IMAGE NAMES
a1b2c3d4e5f6 cdh-node-base cdh01.hadoop
b2c3d4e5f6g7 cdh-node-base cdh02.hadoop
c3d4e5f6g7h8 cdh-node-base cm.hadoop
② 使用 docker commit
打包容器
将运行中的容器保存为镜像:
bash
docker commit cdh01.hadoop cdh-node:v1.0
docker commit cm.hadoop cloudera-manager:v1.0
💡 提示:你也可以为不同角色创建不同镜像,如 cdh-worker
、cdh-manager
。
③ 查看镜像是否生成成功
bash
docker images
你会看到类似:
REPOSITORY TAG IMAGE ID CREATED SIZE
cdh-node v1.0 bb8927b5208b 10 seconds ago 9.28GB
cloudera-manager v1.0 34f5886ee4df 8 seconds ago 13GB
📦 可选:导出镜像为 .tar
文件(备份 or 迁移)
如果你希望将镜像导出分享或备份:
bash
docker save -o cdh-node-v1.0.tar cdh-node:v1.0
docker save -o cloudera-manager-v1.0.tar cloudera-manager:v1.0
导入方式也很简单:
bash
docker load -i cdh-node-v1.0.tar
🧪 验证镜像是否可用
你可以新建一台测试机或容器环境,然后通过这些镜像启动:
bash
docker run -it --name test-node cdh-node:v1.0 /bin/bash
在容器内检查配置文件、服务是否存在、CM 是否能识别 agent,一切正常的话,这就是你的 "克隆模板"!
🧭 总结
这次在测试环境中构建并打包 CDH 镜像的经历,让我明白了两件事:
- 测试环境的努力不应浪费:通过镜像,我们把环境"冻结",未来重建无压力;
- 运维自动化的第一步就是可复用性:只要基础环境一致,我们可以任意克隆、部署、分发。
留给未来的自己一个打包好的环境,是对自己最温柔的善意。
🔖 最后附上一键打包脚本(可选)
bash
#!/bin/bash
containers=("cdh01.hadoop" "cdh02.hadoop" "cm.hadoop")
for name in "${containers[@]}"; do
image_name="${name}-image:v1.0"
echo "打包容器 $name 为镜像 $image_name"
docker commit "$name" "$image_name"
done