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

构建 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.lryc.cn/news/589016.html

相关文章:

  • 波动回升正当时!期权合成多头:震荡市攻守兼备利器
  • 职业院校网络安全攻防对抗实训室解决方案
  • Axios 和Express 区别对比
  • 大模型在1型糖尿病肾病V期预测及治疗方案制定中的应用研究
  • 编写一个简单的riscv模拟器(三)
  • MySQL 备份与恢复指南
  • etcd压缩历史版本
  • Web3 学习路线与面试经验
  • Springboot集成SpringSecurity的介绍及使用
  • AR眼镜颠覆医疗:精准手术零误差
  • 1.1 前端-vue3项目的创建
  • vscode 打开c++文件注释乱码
  • mysql 索引失效的场景
  • 将 Vue 3 + Vite + TS 项目打包为 .exe 文件
  • SpringBoot 实现 Redis读写分离
  • 编译原理第一到三章(知识点学习/期末复习/笔试/面试)
  • 第三章 OB SQL 引擎高级技术
  • HR数字化转型:3大痛点解决方案与效率突破指南
  • B/S架构系统角色与对应协议详解
  • AAAI-2025 | 同济大学面向嘈杂环境的音频视觉导航!BeDAViN:大规模音频-视觉数据集与多声源架构研究
  • HCIA第三次综合实验:VLAN
  • iOS高级开发工程师面试——常见第三方框架架构设计
  • ESP32S3+VSCode+PlatformIO+Arduino+Freertos开发入门指南:基于Arduino框架的应用开发全流程
  • 基于LAMP环境的校园论坛项目
  • 新手向:Python数据处理Excel报表自动化生成与分析
  • 剑指offer62_骰子的点数
  • 为什么市场上电池供电的LoRa DTU比较少?
  • [Pytest][Part 5]单条测试和用例集测试
  • MMYSQL刷题
  • CAU数据挖掘 第五章 聚类问题