在 CentOS 7 中优化 Docker 镜像需重点关注体积缩减和安全加固,以下是完整解决方案:

一、镜像体积优化

1. 多阶段构建(关键手段)
# 第一阶段:构建环境
FROM centos:7 AS builder
RUN yum install -y gcc make && \ 
    curl -O https://example.com/source.tar.gz && \
    tar -xzf source.tar.gz && \
    cd source && make

# 第二阶段:运行环境
FROM centos:7
COPY --from=builder /source/bin/app /usr/local/bin/
# 清理缓存
RUN yum clean all && rm -rf /var/cache/yum
CMD ["app"]

2. 缓存清理技巧
RUN yum install -y epel-release && \
    yum install -y python3-pip && \
    pip3 install --no-cache-dir -r requirements.txt && \
    yum remove -y python3-pip && \  # 移除构建依赖
    yum clean all && \
    rm -rf /var/cache/yum /tmp/*

二、安全扫描实践

1. 集成 Trivy 扫描
# 安装扫描工具
sudo yum install -y wget
wget https://github.com/aquasecurity/trivy/releases/download/v0.45.1/trivy_0.45.1_Linux-64bit.tar.gz
tar -xzf trivy*.tar.gz

# 扫描镜像
./trivy image your-image:tag

2. 关键扫描指标
风险类型处理建议
高危CVE立即升级受影响软件包
配置缺陷修改Dockerfile加固配置
敏感信息泄露检查是否包含密钥文件

三、综合优化建议

  1. 基础镜像选择

    FROM centos:7-slim  # 比标准镜像小40%
    

  2. 层合并技巧

    RUN yum install -y httpd && \
        sed -i 's/^ServerSignature On/ServerSignature Off/' /etc/httpd/conf/httpd.conf && \
        yum clean all
    

  3. 安全加固

    RUN groupadd -r appuser && useradd -r -g appuser appuser
    USER appuser  # 禁止root运行
    

四、验证流程

# 体积对比
docker images | grep your-image

# 安全扫描
trivy image --severity HIGH,CRITICAL your-image:latest

# 运行时检测
docker run --rm -it your-image sh -c "echo '无敏感命令'"

最佳实践

  1. 每次构建后执行 docker history IMAGE 分析各层大小
  2. 使用 dive 工具交互式分析镜像内容:
    wget https://github.com/wagoodman/dive/releases/download/v0.11.0/dive_0.11.0_linux_amd64.rpm
    sudo rpm -i dive*.rpm
    dive your-image:tag
    

通过多阶段构建可将典型Python应用镜像从1.2GB缩减至350MB,结合安全扫描可将高危漏洞减少90%。定期更新基础镜像(建议每月)是持续安全的关键。

更多推荐