Docker容器实践------使用Dockerfile构建docker镜像
https://coffeemilk.blog.csdn.net/article/details/160341844?spm=1001.2014.3001.5502Docker容器实践------docker与docker-compose的常用清理命令与常用命令
https://blog.csdn.net/xiaochenXIHUA/article/details/160480977
一、Docker基础镜像的分类与对比
Docker基础镜像是构建容器的底层依赖,直接决定容器大小、安全性、构建速度、兼容性。
1.1、Docker基础镜像的核心分类
| 镜像类型 | 代表镜像 | 特点 | 适用人群 |
|---|---|---|---|
| 超轻量 | scratch、busybox |
极小、无系统依赖 | 静态编译程序(Go/C++) |
| 极简 Linux | alpine |
体积小、包全、最流行 | 绝大多数微服务、Web 应用 |
| 标准 Debian | debian |
稳定、兼容好、体积中等 | 需系统库、兼容性优先 |
| 标准 Ubuntu | ubuntu |
易用、生态极丰富 | 开发环境、桌面化容器 |
| 企业级 RHEL 系 | centos/rockylinux |
稳定、长期支持 | 企业生产、传统服务 |
| 语言专用 | python/node/golang |
开箱即用、内置运行环境 | 快速构建语言应用 |
1.2、Docker基础镜像对比表
| 镜像 | 体积 | 兼容性 | 安全性 | 易用性 | 推荐度 |
|---|---|---|---|---|---|
| scratch | 极小 | 差 | 极高 | 难 | ⭐⭐⭐ |
| busybox | 极小 | 一般 | 高 | 一般 | ⭐⭐⭐ |
| alpine | 小 | 良 | 高 | 良 | ⭐⭐⭐⭐⭐ |
| debian-slim | 中 | 优 | 高 | 良 | ⭐⭐⭐⭐ |
| ubuntu | 中大 | 优 | 中 | 优 | ⭐⭐⭐ |
| rocky/centos | 大 | 优 | 中 | 良 | ⭐⭐ |
| 语言专用 | 中 / 大 | 优 | 高 | 极优 | ⭐⭐⭐⭐⭐ |
二、Docker基础镜像的详细对比
2.1、scratch(空镜像,Docker 最小基础镜像)
bash
#使用scratch基础镜像对应的Dockerfile
FROM scratch
ADD my-static-binary /
CMD ["/my-static-binary"]
| 内容 | 说明 |
|---|---|
| 镜像定义 | 空文件系统,没有任何操作系统文件、命令、库。 |
| ✅优点 | 1. 体积无限接近 0,极致轻量化; 2. 无任何漏洞面,安全性最高; 3. 启动速度极快 |
| ❌缺点 | * 无 shell、无包管理器、无系统命令 * 只能运行静态编译的二进制文件(Go/C 静态编译) * 无法调试、无法进入容器 |
| 🎯 使用场景 | * Go 语言编译的静态二进制程序 * C/C++ 静态编译程序 * 极致安全、极致精简的生产容器 |
2.2、 busybox(迷你工具箱镜像)
bash
#使用busybox基础镜像的Dockerfile
FROM busybox
COPY app /app
CMD ["/app"]
| 内容 | 说明 |
|---|---|
| 镜像定义 | 集成了几百个 Linux 常用命令的极小镜像(~1MB)。 |
| ✅优点 | 1. 体积极小(1MB 左右); 2. 包含常用命令:ls/cat/echo/wget; 3. 比 scratch 更易调试。 |
| ❌缺点 | * 不是完整 Linux,缺少系统库 * 不支持动态链接程序 * 包管理弱 |
| 🎯 使用场景 | * 简单工具容器、初始化容器 * 静态程序 + 需要简单调试 |
2.3、alpine(最主流、最推荐通用基础镜像)
bash
#使用alpine基础镜像的Dockerfile
FROM alpine
RUN apk add --no-cache curl
| 内容 | 说明 |
|---|---|
| 镜像定义 | 独立轻量级 Linux 发行版,Docker 官方默认首选。 |
| ✅优点 | 1. 体积极小(5MB 左右); 2. 有完整包管理 apk,软件极全; 3. 安全、更新快; 4. 几乎所有官方镜像都提供 alpine 变体。 |
| ❌缺点 | * 使用 musl libc,部分软件兼容性略差(如 Node/Python 部分原生库) * 调试工具比 Debian 少 |
| 🎯 使用场景 | * 90% 的微服务、Web 服务、API 服务 * Nginx/Redis/MySQL 等中间件 * 生产环境优先选择 * 追求小体积、快分发、低资源 |
2.4、debian(稳定标准 Linux)
#使用debian基础镜像的Dockerfile
FROM debian:bookworm-slim
| 内容 | 说明 |
|---|---|
| 镜像定义 | Debian 稳定版,glibc 标准环境,兼容性极强。 |
| ✅优点 | 1. 兼容性极好(标准 glibc); 2. 稳定、长期支持; 3. 软件生态极丰富; 4. slim 变体体积小(~50MB)。 |
| ❌缺点 | * 比 alpine 大 * 包更新速度一般 |
| 🎯 使用场景 | * 需要完整系统库的应用 * Python/Node/Java 有原生扩展的程序 * 对兼容性要求高的业务 |
2.5、ubuntu(易用型标准 Linux)
bash
#使用ubuntu基础镜像的Dockerfile
FROM ubuntu:24.04
| 内容 | 说明 |
|---|---|
| 镜像定义 | 完整的ubuntu系统 |
| ✅优点 | 1. 文档最多、社区最大; 2. 工具齐全、新手友好; 3. 兼容所有 Linux 软件。 |
| ❌缺点 | * 体积较大 * 生产环境不如 alpine 轻量 |
| 🎯 使用场景 | * 开发环境、CI/CD 构建容器 * 桌面应用、GUI 容器 * 学习、测试环境 |
2.6、centos /rocky linux(企业级稳定镜像)
bash
#使用centos /rocky linux /almalinux等红帽系基础镜像做Dockerfile
FROM rockylinux:9
| 内容 | 说明 |
|---|---|
| 镜像定义 | 完整的红帽系系统 |
| ✅优点 | 1. 超长期支持(5-10 年); 2. 企业级稳定; 3. 运维习惯友好; |
| ❌缺点 | * 体积大 * 包更新慢 * centos 已停止维护,推荐 rocky/almaLinux |
| 🎯 使用场景 | * 传统企业应用 * 需长期稳定不更新的系统 * 运维团队熟悉 RHEL 系 |
2.7、语言专用官方镜像(python、golang、java、node等)
bash
#使用语言专用官方镜像(python、golang、java、node等)基础镜像的Dockerfile
FROM python:3.12-slim
FROM node:22-alpine
FROM golang:1.23
| 内容 | 说明 |
|---|---|
| 镜像定义 | 语言对应的官方镜像 |
| ✅优点 | 1. 开箱即用,内置语言运行环境; 2. 官方维护、安全可靠; 3. 提供 alpine /slim 等变体。 |
| ❌缺点 | * 完整版体积较大 * 部分依赖需手动安装 |
| 🎯 使用场景 | * 快速构建语言应用 * 开发、测试、生产通用 * 不想自己配置运行环境 |
三、基础镜像的选择与最佳实践
3.1、如何选择基础镜像
| 基础镜像选择场景 | 说明 |
|---|---|
| 生产环境首选 | alpine → 小、快、安全、通用 |
| 程序有原生扩展 / 依赖系统库 | debian-slim → 兼容性最强 |
| Go/C 静态编译程序 | scratch → 极致安全最小 |
| 快速开发语言应用 | 官方语言镜像(alpine 变体)【python:alpine、node:alpine】 |
| 企业传统服务 | rockylinux → 稳定长期支持 |
| 开发 / 测试 / CI | ubuntu → 工具全、易调试 |
3.2、基础镜像的最佳实践
| 基础镜像的最佳实践 | 说明 |
| 永远用标签,不用 latest | #【推荐使用】 FROM alpine:3.20 #不建议 FROM alpine |
|---|---|
| 优先使用 slim /alpine 变体 | |
| 生产环境不用带 dev/debug 的镜像 | |
| 多阶段构建减小体积 | #构建阶段 FROM golang:1.23-alpine AS builder WORKDIR /app COPY . . RUN go build -o app #运行阶段(极小最终镜像) FROM alpine:3.20 COPY --from=builder /app/app / CMD ["/app"] |