【Docker镜像】Dockerfile编写与优化
·
一、什么是镜像?
- 镜像(Image) 是一个只读模板,包含运行应用所需的代码、依赖、配置和环境。
- 容器 = 镜像 + 可写层(运行时临时修改)。
- 镜像采用分层存储:每一步变更生成一层,上层可覆盖下层。
二、镜像制作的标准方式:Dockerfile
基本流程:
-
编写
Dockerfile -
执行构建命令:
docker build -t myapp:v1 . -
镜像生成,可用于
docker run
三、Dockerfile 核心指令
| 指令 | 作用 | 示例 |
|---|---|---|
FROM | 指定基础镜像(必须第一条) | FROM alpine:3.18 |
COPY | 复制本地文件到镜像 | COPY app /app/ |
RUN | 构建时执行命令(安装依赖等) | RUN apk add --no-cache curl |
WORKDIR | 设置工作目录 | WORKDIR /app |
ENV | 设置环境变量 | ENV NODE_ENV=production |
USER | 切换运行用户(安全) | USER nobody |
EXPOSE | 声明端口(文档作用) | EXPOSE 8080 |
CMD | 容器启动默认命令 | CMD ["./app"] |
四、镜像优化四大手段
1. 选轻量基础镜像
- 用
alpine(~5MB)替代ubuntu(~70MB+) - 或用 Google 的
distroless(无 shell,极致安全)
2. 多阶段构建(Multi-stage Build)
# 构建阶段
FROM golang:1.21 AS builder
COPY . .
RUN go build -o app .
# 运行阶段(仅拷贝结果)
FROM alpine:3.18
COPY --from=builder /app .
CMD ["./app"]
✅ 最终镜像不含编译器,体积减少 90%
3. 合并 RUN 指令 + 清理缓存
RUN apt update && \
apt install -y python3 && \
rm -rf /var/lib/apt/lists/*
4. 使用 .dockerignore
排除 node_modules、.git、日志等无关文件,加快构建、减小体积。
更多推荐


所有评论(0)