文章目錄
- 構建 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 這樣的大型發行版。 通過去除多余的組件,它們在效率和功能之間取得了平衡。
- 兼容性警告: 雖然尺寸縮小是一大優勢,但請注意兼容性。依賴于已省略的庫或應用程序的工具可能會遇到問題。使用精簡鏡像進行全面測試至關重要。