--- #领域/Linux #复盘/0 ## 一句话描述 [__dockerfile 相关语法______] --- ## 核心规范 >空想不如行动,积累胜于苛求。 >实践 > 沉淀 > 完美主义 实践不是盲目行动,而是带着“小目标、可验证“的方向试错,实践后必须沉淀(比如记录问题、总结规律),否则就是低水平重复。 实践大于沉淀,沉淀大于完美;完美是沉淀的终局方向,沉淀是实践的复盘产物;分域施策,避坑落地,始于行动,终于迭代。 --- ## 三省沉淀法 - 达成了[__简单的镜像构建______]目标 - 遇到了[_暂时无更多的应用_______]问题 - 下次改进[__在开发过程中更多的使用______] ## 个人理解 [___配置容器和环境,例如厨房,微波炉容器、空气炸锅容器、汤锅容器,预先放入食材,外部选择烹饪参数,例如火力、时长_____] ## 实践计划 #状态/待实践 1. [__使用docker镜像封装一些工具,例如通知、备份______] 2. [________] 3. [________] --- ## 核心定义 docker 构建镜像 ### 示例 #### ✅ 构建镜像并一次性启动 ```bash #!/bin/bash # mytool.sh - 自定义Shell工具,支持--input --output参数,模拟实际工具的参数运行 set -e # 执行出错直接退出,符合工具运行逻辑 # 初始化参数 INPUT_FILE="" OUTPUT_FILE="" # 解析命令行参数(和实际工具的参数解析逻辑一致) while [[ $# -gt 0 ]]; do case "$1" in --input) INPUT_FILE="$2" shift 2 ;; --output) OUTPUT_FILE="$2" shift 2 ;; *) echo "错误:未知参数 $1" echo "使用方式:./mytool.sh --input 输入文件 --output 输出文件" exit 1 ;; esac done # 校验参数 if [[ -z $INPUT_FILE || -z $OUTPUT_FILE ]]; then echo "错误:必须指定--input和--output参数!" echo "使用方式:./mytool.sh --input 输入文件 --output 输出文件" exit 1 fi if [[ ! -f $INPUT_FILE ]]; then echo "错误:输入文件 $INPUT_FILE 不存在!" exit 1 fi # 工具核心逻辑(替换成你的工具代码即可) echo "===== 工具开始运行 =====" echo "输入文件:$INPUT_FILE" echo "输出文件:$OUTPUT_FILE" echo "输入文件内容:" cat $INPUT_FILE # 核心功能:将输入文件内容+时间戳写入输出文件 echo -e "\n===== 工具处理结果 =====" > $OUTPUT_FILE echo "处理时间:$(date +'%Y-%m-%d %H:%M:%S')" >> $OUTPUT_FILE echo "原始内容:" >> $OUTPUT_FILE cat $INPUT_FILE >> $OUTPUT_FILE echo -e "\n===== 工具运行完成 =====" ``` ```Dockerfile # 选轻量基础镜像(alpine,仅5M左右),内置bash/sh,无多余依赖 FROM alpine:3.19 # 安装必要依赖(alpine默认无bash,仅需这一步,其他基础镜像如debian可省略) RUN apk add --no-cache bash # 创建工作目录,避免权限混乱,统一工具运行路径 WORKDIR /app # 拷贝自定义工具源码到容器内的工作目录 COPY mytool.sh /app/ # 给工具添加执行权限(Docker打包脚本/二进制工具的核心步骤,必须加) RUN chmod +x /app/mytool.sh # 定义容器入口命令(关键:用ENTRYPOINT,确保运行时传参能追加到工具后) # 这样docker run 镜像名 --input xxx 会被解析为 /app/mytool.sh --input xxx ENTRYPOINT ["/app/mytool.sh"] ``` ```plaintext 这是测试输入文件, 自定义工具会读取该内容, 并写入到输出文件中。 ``` ```bash # 构建镜像 docker build -t mytool-shell:latest . # 执行命令 docker run --rm -v $(pwd):/app mytool-shell:latest --input test.txt --output result.json ``` ### 避坑点 ⚠️ 避坑点1: 解决方案: