构建 Go 可执行文件镜像 | 探索轻量级 Docker 基础镜像(我应该选择哪个 Docker 镜像?)

发布于:2025-07-16 ⋅ 阅读:(18) ⋅ 点赞:(0)

构建 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-release

Unable 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 builder

WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download

COPY . .
# 如果依赖 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 这样的大型发行版。 通过去除多余的组件,它们在效率和功能之间取得了平衡。
    • 兼容性警告: 虽然尺寸缩小是一大优势,但请注意兼容性。依赖于已省略的库或应用程序的工具可能会遇到问题。使用精简镜像进行全面测试至关重要。

网站公告

今日签到

点亮在社区的每一天
去签到