149 lines
3.7 KiB
Markdown
149 lines
3.7 KiB
Markdown
|
||
---
|
||
#领域/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:
|
||
解决方案:
|
||
|