构建 Go 可执行文件镜像 | 探索轻量级 Docker 基础镜像(我应该选择哪个 Docker 镜像?)
文章目录
- 构建 Go 可执行文件镜像
- 典型用途
- 探索轻量级 Docker 基础镜像
构建 Go 可执行文件镜像
golang:1.23.0-bullseye
是官方 Go 镜像的一个 “build-stage” 版,用来构建 Go 可执行文件,而不是把它当成最终运行镜像。
dockerhub官方:https://hub.docker.com/layers/library/golang/1.23.0-bullseye/images/sha256-6951a314f8134f3de569728bcb92d8717a79317e75f0e20486e1d8a120b1589b
docker Hub 上 golang 镜像的官方页面会明确说明基础镜像。
查看镜像信息
% docker run --rm golang:1.23.0-bullseye cat /etc/os-releaseUnable to find image 'golang:1.23.0-bullseye' locally
1.23.0-bullseye: Pulling from library/golang
d82c4492ee91: Pull complete
7bf248fd6988: Pull complete
01b216df41d3: Pull complete
f6321cc2f68c: Pull complete
73f9ed64c249: Pull complete
8057aa54287e: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:ea90fd4edb6db8b5cf8751fe5eeb08a25549090f48d08c7f3fa91dae648308b6
Status: Downloaded newer image for golang:1.23.0-bullseye
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
构建 Go 可执行文件镜像,在容器里完整复现 Debian Bullseye + Go 1.23.0 的编译环境,用来构建 Go 可执行文件,而不是把它当成最终运行镜像。
❌ 错误姿势:直接拿它当最终镜像,镜像 1 GB+,暴露一堆编译工具,攻击面大,体积臃肿。
典型用途
✅ 正确姿势:多阶段构建里的 builder 阶段
# ---- 1. 编译阶段 ----
FROM golang:1.23.0-bullseye AS builderWORKDIR /src
COPY go.mod go.sum ./
RUN go mod downloadCOPY . .
# 如果依赖 cgo,需要 gcc;纯静态可执行文件可加 CGO_ENABLED=0
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o app .# ---- 2. 运行阶段 ----
FROM debian:11-slim
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/*
COPY --from=builder /src/app /usr/local/bin/app
ENTRYPOINT ["app"]
debian:11-slim(仅当确实需要 glibc 或 apt)
适用场景:适用于那些希望保持Debian稳定性同时又需要较小镜像的应用。
适用:
- 你的二进制 动态链接 glibc(CGO_ENABLED=1 且没静态链接)。
- 需要 apt 安装额外 .deb 包(如 libxml2、libpq 等)。
探索轻量级 Docker 基础镜像
探索轻量级 Docker 基础镜像
原文链接: https://blogs.mohibulalam.xyz/exploring-lightweight-docker-base-images-alpine-slim-and-debian-releases-bookworm-bullseye-688f88067f4b
Alpine、Slim、Bookworm、Bullseye、Stretch、Jessie — 我应该选择哪个 Docker 镜像?
原文链接:https://cloud.tencent.com/developer/article/2457031
Debian Linux 提供了多个发行版,每个版本都有自己的一组特性、软件包和更新。选择合适的 Debian 发行版作为 Docker 基础镜像取决于你的应用程序的需求。
-
Alpine Linux 是一种轻量级 Linux 发行版,以其小尺寸和对安全性的关注而闻名。它通常用作创建小型高效 Docker 容器的基础镜像。由于其极简主义特性,Alpine 镜像往往比基于 Debian 的镜像小得多。
-
“Slim” Docker 镜像,通常被称为“精简”镜像,是基于特定发行版(如 Debian)构建的,但通过删除非必要组件进行了优化,从而缩小了镜像大小。创建这些镜像的目的是为了减小镜像大小并提高效率,同时仍然保持运行应用程序所需的必要功能。
- 大小优化: 轻量级镜像通过省略非必要组件来实现精简,例如未使用的软件包、库和文档。 这种大小的减少可以加快拉取速度和容器启动速度。
- 功能完整性: 尽管进行了精简,Slim 镜像仍保留了大多数应用程序的核心功能。关键库和工具得以保留,以确保常用软件的无缝运行。
- 更大的基础,更精简的构建: 精简镜像通常源于像 Debian 这样的大型发行版。 通过去除多余的组件,它们在效率和功能之间取得了平衡。
- 兼容性警告: 虽然尺寸缩小是一大优势,但请注意兼容性。依赖于已省略的库或应用程序的工具可能会遇到问题。使用精简镜像进行全面测试至关重要。