一、什么是镜像?

  • 镜像(Image) 是一个只读模板,包含运行应用所需的代码、依赖、配置和环境。
  • 容器 = 镜像 + 可写层(运行时临时修改)。
  • 镜像采用分层存储:每一步变更生成一层,上层可覆盖下层。

二、镜像制作的标准方式:Dockerfile

基本流程:

  1. 编写 Dockerfile

  2. 执行构建命令:

    docker build -t myapp:v1 .
    
  3. 镜像生成,可用于 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、日志等无关文件,加快构建、减小体积。

更多推荐