From c6ac6dcf1140c8bccff90010fbde3215746238ca Mon Sep 17 00:00:00 2001 From: expoli <31023767+expoli@users.noreply.github.com> Date: Thu, 17 Nov 2022 23:32:17 +0800 Subject: [PATCH] =?UTF-8?q?docs(dockerfile):=E6=B7=BB=E5=8A=A0=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E5=87=8F=E5=B0=8F=E9=95=9C=E5=83=8F=E4=BD=93=E7=A7=AF?= =?UTF-8?q?=E7=9A=84=E5=A4=9A=E9=98=B6=E6=AE=B5=E6=9E=84=E5=BB=BA=20(#120)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/dockerfile.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/dockerfile.md b/docs/dockerfile.md index fed7c2f2..a7576dbd 100644 --- a/docs/dockerfile.md +++ b/docs/dockerfile.md @@ -207,26 +207,26 @@ temp? `EXPOSE [/...]` | 运行时侦听指定的网络端口 -### 服务静态网站的最小 Docker 镜像 +### Docker 镜像多阶段构建 ```dockerfile -FROM lipanski/docker-static-website:latest -# 使用 .dockerignore 文件来控制图像中的内容! -# 复制当前目录内容,到容器中 -COPY ./ . +FROM golang:alpine as builder +RUN apk --no-cache add git +WORKDIR /go/src/github.com/go/helloworld/ +RUN go get -d -v github.com/go-sql-driver/mysql +COPY app.go . +RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . + +FROM alpine:latest as prod +RUN apk --no-cache add ca-certificates +WORKDIR /root/ +COPY --from=builder /go/src/github.com/go/helloworld/app . +CMD ["./app"] ``` + -这会产生一个 **`154KB +`** 的单层镜像。 如果您需要以不同的方式配置 `httpd`,您可以覆盖 CMD 行: - -```dockerfile -FROM lipanski/docker-static-website:latest -COPY . . - -CMD ["/busybox", "httpd", "-f", "-v", "-p", "3000", "-c", "httpd.conf"] -``` - -缩小镜像过程[查看原文](https://lipanski.com/posts/smallest-docker-image-static-website),镜像 [Dockerfile 源码](https://github.com/lipanski/docker-static-website)。 +使用多阶段构建能将构建依赖留在 builder 镜像中,只将编译完成后的二进制文件拷贝到运行环境中,大大减少镜像体积。 ## 也可以看看