一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Docker 镜像构建脚本如何写

时间:2026-08-11 08:48:49 编辑:袖梨 来源:一聚教程网

Dockerfile是构建镜像的唯一源文件,核心在于选对基础镜像(如python:3.11-slim-bookworm)、合并RUN指令减少层数、用USER或COPY--chown降权运行、避免硬编码敏感信息,并配合shell脚本封装构建、打标、推送等流程,支持多阶段构建与环境变量分支,确保镜像最小化、安全化、可复现。

写 Docker 镜像构建脚本,核心是写好 Dockerfile,再辅以简单 Shell 脚本封装构建、打标签、推送等操作。不需要复杂工具,清晰分层、语义明确、避免硬编码就足够可靠。

写好 Dockerfile 是基础

Dockerfile 是构建镜像的唯一源文件,关键在于:选对基础镜像、最小化层数、合理利用缓存、安全清理中间文件。

  1. 用具体版本号代替 :latest,比如 python:3.11-slim-bookworm,避免意外升级
  2. 合并多条 RUN 命令(用 && 连接),减少镜像层数,例如安装依赖和清理缓存写在同一行
  3. COPY --chownUSER 指令降权运行,别让应用默认以 root 启动
  4. 敏感信息(如密钥)绝不在 Dockerfile 里写死,通过构建参数 --build-arg 或挂载方式传入

用 shell 脚本封装常用构建流程

把重复操作(如构建、打 tag、推送到 registry)写成 build.sh,提升复用性和可读性。

  1. 脚本开头检查必要命令是否存在:command -v docker && command -v git
  2. 用变量定义镜像名、版本、平台等,例如:IMAGE_NAME="myapp"TAG="${CI_COMMIT_TAG:-dev}"
  3. 构建时加 --platform linux/amd64 显式指定架构,避免本地 M1/M2 机器构建出不可部署的镜像
  4. 推送前先 docker login(或用 DOCKER_PASSWORD 环境变量配合 echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USER" --password-stdin

支持多阶段构建和不同环境

一个项目常需 dev / test / prod 多种镜像变体,靠单一 Dockerfile + 构建参数就能覆盖。

  1. Dockerfile 里用 ARG ENV=prod 定义环境变量,后续 RUNCMD 中按需分支
  2. 前端项目常用多阶段:第一阶段用 node:18 构建静态资源,第二阶段用 nginx:alpine 托管产物,最终镜像不到 15MB
  3. 后端服务可加 .dockerignore 排除 node_modules/__pycache__/.git 等,加快上下文传输

验证和调试不能跳过

构建完不等于能跑通,本地快速验证能省去大量 CI 失败重试时间。

  1. 构建后立即运行容器测试基本启动:docker run --rm -p 8080:8080 $IMAGE_NAME:$TAG
  2. 进容器查日志或执行命令:docker run --rm -it $IMAGE_NAME:$TAG sh -c "ls -l /app && env"
  3. docker history 看每层大小,识别臃肿来源;用 docker inspect 查工作目录、入口命令是否符合预期

热门栏目