当前位置: 首页 > backend >正文

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

相关文章:

  • DGNNet:基于双图神经网络的少样本故障诊断学习模型
  • element plus使用插槽方式自定义el-form-item的label
  • 3D数据:从数据采集到数据表示,再到数据应用
  • 本地电脑安装Dify|内网穿透到公网
  • 【Qt】插件机制详解:从原理到实战
  • 【科研绘图系列】R语言绘制中国地图和散点图以及柱状图
  • ES2023 新特性解析_数组与对象的现代化操作指南
  • 一文厘清楼宇自控系统架构:包含哪些关键子系统及其作用
  • 部署项目将dll放到system32?不可取
  • 基于LAMP环境的校园论坛项目
  • 阿里开源项目 XRender:全面解析与核心工具分类介绍
  • Spring面试核心知识点整理
  • iOS高级开发工程师面试——Swift
  • 驭码 CodeRider 产品介绍
  • AR眼镜颠覆医疗:精准手术零误差
  • 再见吧,Windows自带记事本,这个轻量级文本编辑器太香了
  • DeepSWE:通过强化学习扩展训练开源编码智能体
  • PySpark 常用算子详解
  • kotlin的自学笔记1
  • King’s LIMS:实验室数字化转型的智能高效之选
  • 19.如何将 Python 字符串转换为 Slug
  • 极致cms多语言建站|设置主站默认语言与设置后台固定语言为中文
  • 手机当路由,连接机器人和电脑
  • Postman + Newman + Jenkins 接口自动化测试
  • 说下对mysql MVCC的理解
  • DNS的含义以及例子
  • 传输协议和消息队列
  • Claude 背后金主亚马逊亲自下场,重磅发布 AI 编程工具 Kiro 现已开启免费试用
  • 面向医疗AI场景的H20显卡算力组网方案
  • 正则表达式使用示例