文章目录

    • 构建 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.pswp.cn/bicheng/89101.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89101.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/89101.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链表算法之【回文链表】

目录 LeetCode-234题 LeetCode-234题 给定一个单链表的头节点head,判断该链表是否为回文链表,是返回true,否则返回false class Solution {/*** 这里的解题思路为:* (1)、找中间节点* (2)、反转链表* (3)、遍历比较节点值是否相…

Playwright Python 教程:网页自动化

1. 常用工具简介及对比主流网页自动化工具对比工具支持语言浏览器支持特点适用场景PlaywrightPython, JS, .NETChromium, Firefox, WebKit跨浏览器、速度快、API简洁自动化测试、爬虫、网页操作Selenium多语言所有主流浏览器历史悠久、社区大传统自动化测试、兼容性测试Puppete…

动态数组:ArrayList的实现原理

动态数组:ArrayList的实现原理 大家好!今天我们来聊聊Java集合框架中一个非常重要的数据结构——ArrayList。就像我们日常生活中使用的伸缩收纳盒一样,ArrayList可以根据需要自动调整大小,既方便又高效。那么它是如何实现这种&quo…

MIPI DSI(五) DBI 和 DPI 格式

关于 DBI 和 DPI 这两种格式的详细协议内容,请参考《MIPI Alliance Standard for Display Bus Interface(V2.0) .pdf》和《MIPI Alliance Standard for Display Pixel Interface(DPI- 2) .pdf》这两份文档。首先先了解…

FRP Ubuntu 服务端 + MacOS 客户端配置

一、服务端配置 1、下载frp并解压 # 创建目录并进入 mkdir -p /opt/frp && cd /opt/frp # 下载最新版(替换URL为GitHub发布页最新版本) wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz # 解压 …

Video Python(Pyav)解码二

在 PyAV 中,input_container.decode() 和 input_container.demux() 是两种处理视频流数据的不同方法,它们分别适用于不同的场景。下面通过代码示例和对比来详细说明它们的用法和区别。1. input_container.decode()功能直接解码:从容器中读取数…

闲庭信步使用图像验证平台加速FPGA的开发:第十六课——图像五行缓存的FPGA实现

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程…

头文件与源文件及区别

使用场景上的区别头文件:变量的声明,函数的声明,宏的定义,类的定义等。 源文件:变量的定义。函数的定义实现,类成员函数的定义实现等。这样方便于我们去管理、规划,更重要的是避免了重定义的问题…

图机器学习(4)——图机器学习与嵌入算法

图机器学习(4)——图机器学习与嵌入算法0. 前言1. 图机器学习1.1 机器学习基本原理1.2 图机器学习的独特优势2. 广义图嵌入问题3. 图嵌入算法分类小结0. 前言 机器学习是人工智能的一个重要分支,它致力于让系统能够从数据中自主学习并持续优…

网络基础10--ACL与包过滤

一、ACL 定义与核心功能ACL(访问控制列表)是通过规则匹配实现数据包过滤或分类的核心技术,广泛应用于包过滤、NAT、QoS、路由策略等场景。其核心由规则条目组成,每条规则包含匹配条件(如源 / 目 IP、端口、协议&#x…

Web安全 - 基于 SM2/SM4 的前后端国产加解密方案详解

文章目录概述一、背景与法规要求二、算法选型三、核心流程四、前端实现要点(伪代码)五、后端实现要点(伪代码)六、公钥存储策略七、全流程示例图八、总结与最佳实践推荐概述 随着信息安全法规日益严格,如《网络安全法》《数据安全法》和等保…

ACL动态路由实验全攻略:配置与安全实战

实验拓扑图 实验需求 步骤1.按照图示配置IP地址2.按照图示区域划分配置对应的动态路由协议3.在R7上配置dhcp服务器,能够让pc可以获取IP地址4.将所有环回宣告进ospf中,将环回17宣告进rip中,将rip路由引rospf中,ospf路由引.rip中5.要…

电动汽车制动系统及其工作原理

制动系统是实现车辆减速、停车功能的重要系统。电动汽车的制动系统按照制动实现方式分为机械制动和电机再生制动,机械制动根据制动力实现方式不同又可分为液压机械制动系统、气压机械制动系统和电子机械制动系统。目前,电动汽车的制动系统实现一般为协调…

CentOS 7 Linux 离线安装 docker-compose

CentOS 7 Linux 离线安装 docker-compose 1. docker-compose 简介 1.1. docker-compose 是什么? docker-compose 是 Docker 官方提供的工具,用于定义和运行多容器 Docker 应用程序。通过一个 YAML 文件(通常为 docker-compose.yml&#xf…

排序算法实战(上)

一、引言在力扣刷题的旅程中,排序类题目是绕不开的重要板块。今天就来分享两道经典排序题——912. 排序数组和75. 颜色分类的解题思路与代码实现,带你深入理解排序算法在实际题目中的应用 。二、题目剖析与解题思路(一)912. 排序数…

python学智能算法(二十)|SVM基础概念-感知机算法及代码

引言 前序学习进程中,已经学习了超平面的基础知识,学习链接为:超平面 在此基础上,要想正确绘制超平面,还需要了解感知机的相关概念。 感知机 感知机是对生物神经网络的模拟,当输入信号达到感知机的阈值时…

操作HTML网页

一、HTML网页的介绍 HTML,即超文本标记语言(HyperText Markup Language),它不是一种编程语言,而是一种标记语言,用于描述网页的结构。HTML 通过一系列标签来定义网页中的各种元素,如文本、图片…

Django--03视图和模板

Django–03视图和模板 Part 3: Views and templates 本教程承接第二部分,我们将继续开发投票应用,重点介绍 Django 的表单处理和通用视图。 文章目录Django--03视图和模板前言概述一、编写更多视图二、编写实际执行操作的视图三、快捷方式:r…

《每日AI-人工智能-编程日报》--2025年7月15日

介绍:AI :英伟达恢复向中国销售 H20 并推出新 GPU:7 月 15 日,英伟达官宣将恢复向中国销售 H20,并推出全新的 NVIDIA RTX PRO GPU,其中 B30 性能约为 H20 的 75%,定价在 6500 至 8000 美元之间&…

C++STL-list

一.基础概念相当于数据结构里面的双向链表二.基础操作1.list对象创建1. 默认构造函数list<int> l1;2. 初始化列表list<int> l2_1 { 9,8,7,6,5 };list<int> l2_2({ 9, 8, 7, 1, 5 });3. 迭代器list <int> l3(l2_1.begin(), l2_1.end());4. 全0初始化li…