Docker 镜像优化与安全:从镜像体积到供应链安全

为什么要优化 Docker 镜像 Docker 镜像并不是一个简单的压缩包,而是由多个只读 Layer 组成的文件系统。 例如: Dockerfile │ ├── FROM ├── RUN ├── COPY └── RUN │ ▼ Image Layers │ ▼ Container 镜像体积会直接影响: 构建时间。 镜像 Push 时间。 镜像 Pull 时间。 CI/CD 执行时间。 磁盘占用。 容器启动速度。 镜像攻击面。 因此,镜像优化并不只是为了“让镜像变小”。 更准确地说: 镜像优化 │ ├── 减少无用文件 ├── 减少无用依赖 ├── 提高构建缓存命中率 ├── 缩短构建时间 ├── 减少网络传输 └── 降低攻击面 Docker 官方也将“小而聚焦”的镜像作为生产镜像构建的重要目标,并强调镜像大小和安全性之间存在直接关系。 因此,一份生产级 Dockerfile 通常应该同时考虑: 体积 性能 缓存 安全 可维护性 而不是只关注其中一个指标。 选择合适的基础镜像 基础镜像是整个 Docker 镜像的起点。 例如:...

2024年05月13日 · 5 min · Leanku

Dockerfile 详解:从基础指令到生产级镜像构建

Docker 的核心使用方式可以简单理解为: Dockerfile ↓ docker build ↓ Docker Image ↓ docker run ↓ Docker Container 如果说 Docker Container 解决的是“应用怎么运行”,那么 Dockerfile 解决的就是“应用运行环境怎么构建”。 在实际项目中,我们很少直接使用一个现成镜像完成所有工作。对于 PHP、Java、Node.js、Go 等应用,通常需要把项目代码、运行环境、依赖以及启动方式封装成自己的镜像。 Docker 官方将 Dockerfile 定义为描述镜像构建过程的文本文件,Docker 会按照其中的指令顺序构建镜像。Dockerfile 通常从 FROM 开始,并支持 RUN、COPY、CMD、ENTRYPOINT、ENV、ARG、WORKDIR、USER、HEALTHCHECK 等指令。 1. Dockerfile 是什么 一个最简单的 Dockerfile: FROM nginx:1.27 COPY ./html /usr/share/nginx/html 然后执行: docker build -t my-nginx:1.0 . Docker 会读取当前目录下的 Dockerfile,并根据指令构建镜像。 这里有两个重要概念: Dockerfile 定义: 使用什么基础镜像 安装什么软件 复制什么文件 设置什么环境变量 使用什么用户 容器启动时运行什么程序 Image Dockerfile 执行完成后得到镜像。 例如: Dockerfile │ │ docker build ▼ my-nginx:1....

2024年05月06日 · 5 min · Leanku