镜像最小化与不运行 root
在 Docker 安全最佳实践中,减小镜像体积和避免 root 用户运行容器可以降低攻击面和潜在风险。
1. 镜像最小化
- 选择轻量基础镜像:
- Alpine、Debian Slim 等
dockerfile
FROM alpine:3.18多阶段构建(Multi-stage build):
- 构建阶段安装依赖和编译
- 最终镜像只包含运行所需文件
dockerfile
# 构建阶段
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"]- 删除不必要文件与缓存:
dockerfile
RUN apt-get update && apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*2. 不运行 root 用户
- 创建非 root 用户并切换:
dockerfile
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser好处:
- 降低容器被入侵后系统权限风险
- 遵守安全合规要求
验证当前用户:
bash
whoami3. 配置文件和数据权限
- 为非 root 用户设置适当权限:
dockerfile
RUN mkdir /app/data && chown -R appuser:appgroup /app/data- 挂载卷时,确保目录权限正确:
yaml
volumes:
- ./data:/app/data:rw4. 最佳实践总结
- 使用最小基础镜像,减少攻击面
- 多阶段构建降低最终镜像体积
- 不以 root 用户运行容器,提高安全性
- 对挂载卷和数据目录设置正确权限
- 定期扫描镜像漏洞,确保安全
通过镜像最小化和非 root 用户运行策略,可以构建更安全、轻量且易于维护的 Docker 镜像,保障容器化应用在生产环境中的稳定运行。