juechafun/05-原子化笔记本/Linux-Docker构建镜像.md

3.7 KiB
Raw Blame History


#领域/Linux

#复盘/1

一句话描述

[dockerfile 相关语法____]


核心规范

空想不如行动,积累胜于苛求。 实践 > 沉淀 > 完美主义

实践不是盲目行动,而是带着“小目标、可验证“的方向试错,实践后必须沉淀(比如记录问题、总结规律),否则就是低水平重复。

实践大于沉淀,沉淀大于完美;完美是沉淀的终局方向,沉淀是实践的复盘产物;分域施策,避坑落地,始于行动,终于迭代。


三省沉淀法

  • 达成了[简单的镜像构建____]目标
  • 遇到了[暂时无更多的应用______]问题
  • 下次改进[在开发过程中更多的使用____]

个人理解

[配置容器和环境,例如厨房,微波炉容器、空气炸锅容器、汤锅容器,预先放入食材,外部选择烹饪参数,例如火力、时长__]

实践计划

#状态/待实践

  1. [使用docker镜像封装一些工具例如通知、备份____]
  2. [________]
  3. [________]

核心定义

docker 构建镜像

示例

构建镜像并一次性启动

#!/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===== 工具运行完成 ====="

# 选轻量基础镜像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"]

这是测试输入文件,
自定义工具会读取该内容,
并写入到输出文件中。
# 构建镜像
docker build -t mytool-shell:latest .

# 执行命令
docker run --rm -v $(pwd):/app mytool-shell:latest --input test.txt --output result.json

避坑点

⚠️ 避坑点1 解决方案: