Debian Docker镜像构建最佳实践
一 基础镜像与分层策略
二 减小镜像体积与构建缓存
三 安全与可维护性
四 可复制构建与运行
五 完整示例 Dockerfile
# 1) 选择精简基础镜像
FROM debian:bookworm-slim
# 2) 构建参数与元数据
ARG DEBIAN_VERSION=bookworm
ARG APP_USER=app
ARG APP_DIR=/app
# 3) 环境与非交互
ENV DEBIAN_FRONTEND=noninteractive \
TZ=Etc/UTC \
APP_DIR=${APP_DIR}
# 4) 安装运行时依赖(仅必要包,且不装推荐)
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
curl \
tzdata \
&& rm -rf /var/lib/apt/lists/* \
&& ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
&& dpkg-reconfigure -f noninteractive tzdata
# 5) 非 root 用户
RUN adduser --disabled-password --gecos '' --home ${APP_DIR} ${APP_USER} \
&& chown -R ${APP_USER}:${APP_USER} ${APP_DIR}
# 6) 工作目录与代码拷贝(变更少在前,变更多在后)
WORKDIR ${APP_DIR}
COPY --chown=${APP_USER}:${APP_USER} . .
# 7) 多阶段示例:若需要构建(Go 示例)
# FROM golang:1.22-bookworm AS builder
# WORKDIR /src
# COPY go.mod go.sum ./
# RUN go mod download
# COPY . .
# RUN go build -o myapp .
#
# FROM debian:bookworm-slim
# RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates \
# && rm -rf /var/lib/apt/lists/*
# WORKDIR /app
# COPY --from=builder /src/myapp .
# USER ${APP_USER}
# CMD ["./myapp"]
# 8) 非 root 运行与启动命令
USER ${APP_USER}
EXPOSE 8080
CMD ["/bin/sh", "-c", "echo 'ready' && exec sleep infinity"]