
---
#领域/Linux

#复盘/1

## 一句话描述

[__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：
    解决方案：

