Dockerfile是构建镜像的唯一源文件,核心在于选对基础镜像(如python:3.11-slim-bookworm)、合并RUN指令减少层数、用USER或COPY--chown降权运行、避免硬编码敏感信息,并配合shell脚本封装构建、打标、推送等流程,支持多阶段构建与环境变量分支,确保镜像最小化、安全化、可复现。
写 Docker 镜像构建脚本,核心是写好 Dockerfile,再辅以简单 Shell 脚本封装构建、打标签、推送等操作。不需要复杂工具,清晰分层、语义明确、避免硬编码就足够可靠。
Dockerfile 是构建镜像的唯一源文件,关键在于:选对基础镜像、最小化层数、合理利用缓存、安全清理中间文件。
:latest,比如 python:3.11-slim-bookworm,避免意外升级RUN 命令(用 && 连接),减少镜像层数,例如安装依赖和清理缓存写在同一行COPY --chown 或 USER 指令降权运行,别让应用默认以 root 启动Dockerfile 里写死,通过构建参数 --build-arg 或挂载方式传入把重复操作(如构建、打 tag、推送到 registry)写成 build.sh,提升复用性和可读性。
command -v docker && command -v git
IMAGE_NAME="myapp"、TAG="${CI_COMMIT_TAG:-dev}"
--platform linux/amd64 显式指定架构,避免本地 M1/M2 机器构建出不可部署的镜像docker login(或用 DOCKER_PASSWORD 环境变量配合 echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USER" --password-stdin)一个项目常需 dev / test / prod 多种镜像变体,靠单一 Dockerfile + 构建参数就能覆盖。
Dockerfile 里用 ARG ENV=prod 定义环境变量,后续 RUN 或 CMD 中按需分支node:18 构建静态资源,第二阶段用 nginx:alpine 托管产物,最终镜像不到 15MB.dockerignore 排除 node_modules/、__pycache__/、.git 等,加快上下文传输构建完不等于能跑通,本地快速验证能省去大量 CI 失败重试时间。
docker run --rm -p 8080:8080 $IMAGE_NAME:$TAG
docker run --rm -it $IMAGE_NAME:$TAG sh -c "ls -l /app && env"
docker history 看每层大小,识别臃肿来源;用 docker inspect 查工作目录、入口命令是否符合预期