如何使用Docker容器按轮询调度读取、排序并合并多个文本文件
Docker文本合并作业实现指南
核心逻辑说明
你不需要对Docker做复杂配置,直接用官方Ubuntu基础镜像即可实现需求:通过Docker创建3个独立的执行环境,将拆分后的文本分片送入容器排序,最后合并结果。
前置准备
- 本地新建文件夹
text_files,将所有待处理的零散文本文件放入该目录 - 确认Docker服务正常运行,执行命令验证:
docker --version - 拉取Ubuntu官方基础镜像:
docker pull ubuntu:latest
步骤1:启动3个处理容器
执行以下3条命令启动容器,直接挂载本地text_files目录到容器内部,无需手动导入文件:
- 启动容器1:
docker run -d --name proc-1 -v $(pwd)/text_files:/data ubuntu sleep infinity - 启动容器2:
docker run -d --name proc-2 -v $(pwd)/text_files:/data ubuntu sleep infinity - 启动容器3:
docker run -d --name proc-3 -v $(pwd)/text_files:/data ubuntu sleep infinity
参数说明:-d表示后台运行容器,--name自定义容器名方便后续调用,-v实现本地目录和容器目录的共享映射,sleep infinity让容器持续运行不自动退出。
执行docker ps可查看3个容器的运行状态,STATUS列为Up即为正常。
步骤2:按round-robin规则拆分文本
- 先将所有零散文本的内容汇总为单行列表,本地执行:
cat ./text_files/*.txt > ./text_files/all_raw.txt - 按轮询规则拆分内容:第1/4/7...行分给容器1,第2/5/8...行分给容器2,第3/6/9...行分给容器3,拆分后的3个分片文件直接存入
text_files目录即可被三个容器读取。
你已完成的CLI脚本可直接复用此逻辑,拆分后的文件命名为split_1.txt、split_2.txt、split_3.txt即可。
步骤3:容器内执行排序
通过docker exec命令直接在运行的容器内执行排序操作,无需进入容器交互界面:
- 容器1排序:
docker exec proc-1 sort /data/split_1.txt > ./text_files/sorted_1.txt - 容器2排序:
docker exec proc-2 sort /data/split_2.txt > ./text_files/sorted_2.txt - 容器3排序:
docker exec proc-3 sort /data/split_3.txt > ./text_files/sorted_3.txt
步骤4:合并最终结果
将三个排序后的分片文件合并为完整文件,若要求最终整体有序可额外追加一次全局排序:
cat ./text_files/sorted_*.txt | sort > ./final_result.txt
环境清理
作业完成后可执行命令删除创建的3个容器:docker rm -f proc-1 proc-2 proc-3
内容的提问来源于stack exchange,提问作者Jarl Balgruuf
相关产品推荐
相关产品推荐

