镜像最小化与不运行 root

在 Docker 安全最佳实践中,减小镜像体积和避免 root 用户运行容器可以降低攻击面和潜在风险。

1. 镜像最小化

  • 选择轻量基础镜像:
    • Alpine、Debian Slim 等
FROM alpine:3.18

`

  • 多阶段构建(Multi-stage build):

    • 构建阶段安装依赖和编译
    • 最终镜像只包含运行所需文件
# 构建阶段
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

# 运行阶段
FROM alpine:latest
COPY --from=builder /app/myapp /app/myapp
CMD ["/app/myapp"]
  • 删除不必要文件与缓存:
RUN apt-get update && apt-get install -y curl \
    && rm -rf /var/lib/apt/lists/*

2. 不运行 root 用户

  • 创建非 root 用户并切换:
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
  • 好处:

    • 降低容器被入侵后系统权限风险
    • 遵守安全合规要求
  • 验证当前用户:

whoami

3. 配置文件和数据权限

  • 为非 root 用户设置适当权限:
RUN mkdir /app/data && chown -R appuser:appgroup /app/data
  • 挂载卷时,确保目录权限正确:
volumes:
  - ./data:/app/data:rw

4. 最佳实践总结

  • 使用最小基础镜像,减少攻击面
  • 多阶段构建降低最终镜像体积
  • 不以 root 用户运行容器,提高安全性
  • 对挂载卷和数据目录设置正确权限
  • 定期扫描镜像漏洞,确保安全

通过镜像最小化和非 root 用户运行策略,可以构建更安全、轻量且易于维护的 Docker 镜像,保障容器化应用在生产环境中的稳定运行。