核心是通过多阶段构建实现环境隔离:第一阶段用含工具链的镜像编译,第二阶段用轻量镜像仅运行产物;ARG用于动态传参且不残留镜像中;.dockerignore精简上下文,避免污染。
核心是让构建过程不依赖宿主机状态,也不污染本地工作树。关键不在“装什么”,而在“怎么隔离”。
构建工具(如 Go 编译器、Node.js、Python pip)只出现在构建阶段,最终镜像里完全不带它们。
Docker 构建时默认把当前目录(包括 .git、node_modules、dist 等)全复制进构建上下文,容易带入脏数据。
.git、**/node_modules、**/__pycache__、dist、build、.env
git archive 导出干净源码再构建,彻底绕过本地工作树构建行为应能随环境动态调整,而不是靠改 Dockerfile。
ARG NODE_VERSION=18、ARG BUILD_ENV=prod 声明可变参数--build-arg NODE_VERSION=20 注入 CI 流水线中的版本号或分支名CI 流水线里不要在宿主机上 git clone + docker build,而应在容器里完成检出。
RUN git clone --depth 1 -b $TAG https://xxx.git /app(配合 ARG 传入 tag)git archive 打包,再 docker build -f Dockerfile --target=build .