对于大多数生产就绪应用程序来说,Docker 文件的大小很重要。一个缩小的 docker 镜像将运行平稳且安全。
构建图像最具挑战性的事情之一就是缩小图像大小。 Dockerfile 中的每条指令都会为映像添加一层,您需要记住在继续下一层之前清理您不需要的任何工件。要编写一个真正高效的 Dockerfile,您通常需要使用 shell 技巧和其他逻辑来保持层尽可能小,并确保每一层都具有前一层所需的工件,而没有其他任何东西。
实际上,有一个 Dockerfile 用于开发(其中包含构建应用程序所需的所有内容)和一个精简的用于生产的 Dockerfile 是很常见的,它只包含您的应用程序以及运行它所需的内容。这被称为“建造者模式”。维护两个 Dockerfile 并不理想。
现在简单理解这个
构建阶段
WORKDIR /appCOPY . ./appRUN go build -o main main.go
运行阶段
1.在第二阶段,拉取最短的docker镜像(alpine)
WORKDIR /app
- 将之前镜像中的二进制代码复制到工作目录 zwz 100010
COPY .env .
EXPOSE 8080CMD ["/app/main"]
Dockerfile
// Build stage
FROM golang:1.18.2-alpine3.16 AS builder
WORKDIR /app
COPY . .
RUN go build -o main main.go
//Run stage
FROM alpine:3.16
WORKDIR /app
COPY --from=builder /app/main .
//this `COPY app.env .` should not be run in production
COPY .env .
EXPOSE 8080
CMD ["/app/main"]
更多信息请阅读官方 Docker 文档
使用多阶段构建 | Docker 文档