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

Docker多阶段构建(Multi-stage Build)介绍(distroless镜像 / slim基础镜像、slim镜像)(FROM指令的本质)胖镜像瘦镜像、COPY . .、FROM命令

文章目录 多阶段构建与精简基础镜像distroless / slim实践指南 一、为什么需要优化镜像❌ 问题 二、什么是多阶段构建Multi-stage Build✅ 核心思想 示例Go 项目 优势 三、distroless 镜像详解 什么是 distroless distroless 不包含✅ distroless 包含 常见 distroless 镜像 优势⚠️ 缺点 四、slim 镜像详解 什么是 slim✅ 特点 优势⚠️ 缺点⚖️ 五、distroless vs slim 对比 六、推荐组合多阶段 distroless 思路总结 七、安全最佳实践✅ 1. 使用最小权限✅ 2. 明确入口✅ 3. 扫描漏洞✅ 4. 固定版本 八、调试技巧distroless方法 1临时切换 slim方法 2使用 debug 版本方法 3Sidecar 调试 九、适用场景总结 十、总结补充FROM指令的本质多阶段构建的工作机制阶段1构建阶段阶段2运行阶段关键点理解1. **每个FROM都是独立的起点**2. **为什么需要这样**3. **COPY --from的作用**类比理解单阶段构建的对比总结 多阶段构建与精简基础镜像distroless / slim实践指南在容器化逐渐成为基础设施标准的今天如何构建更小、更安全、更高效的镜像已经成为工程团队的重要课题。本文将围绕三个核心点展开什么是多阶段构建Multi-stage Build什么是 distroless / slim 镜像如何在实际项目中结合使用 一、为什么需要优化镜像在默认情况下我们常见的 Dockerfile 可能是这样的FROM golang:1.22 WORKDIR /app COPY . . RUN go build -o app CMD [./app]这种写法存在几个明显问题❌ 问题镜像体积大包含完整编译环境包含无关工具gcc、git 等攻击面大潜在漏洞更多启动速度慢镜像大 这正是多阶段构建和精简镜像要解决的问题。 二、什么是多阶段构建Multi-stage Build多阶段构建是 Docker 提供的一种构建机制 允许在一个 Dockerfile 中使用多个FROM每个阶段只做一件事。✅ 核心思想构建环境 ≠ 运行环境 示例Go 项目# 第一阶段构建 FROM golang:1.22 AS builder WORKDIR /app COPY . . RUN CGO_ENABLED0 GOOSlinux go build -o app # 第二阶段运行 FROM gcr.io/distroless/base WORKDIR /app COPY --frombuilder /app/app . CMD [./app]注COPY . .是 Dockerfile 中的复制指令具体含义如下第一个.表示源路径指的是构建上下文的根目录即包含 Dockerfile 的目录宿主机第二个.表示目标路径指的是当前工作目录由前面的WORKDIR /app指定容器内作用将本地项目目录中的所有文件和子目录除了.dockerignore中排除的文件复制到容器的/app目录中。 优势优势说明镜像更小只包含最终二进制更安全不包含编译工具更清晰构建与运行分离更快部署镜像传输更快 三、distroless 镜像详解 什么是 distrolessdistroless 无发行版no distro由 Google 推出的一类镜像只包含运行应用所需的最小依赖 distroless 不包含shell没有 bash / sh包管理器apt / yum调试工具curl / ps✅ distroless 包含应用运行时依赖glibc 等证书CA certs最小系统库 常见 distroless 镜像镜像用途distroless/base通用基础distroless/static静态编译程序distroless/javaJava 应用distroless/nodejsNode.js 应用 优势 更安全极小攻击面⚡ 更小几十 MB 甚至更小 更快启动⚠️ 缺点无法进入容器调试没有 shell排查问题困难学习成本较高 四、slim 镜像详解相比 distroless“slim” 是一种折中方案。 什么是 slim例如python:3.12-slimnode:20-slim 是官方镜像的“精简版”✅ 特点保留基础操作系统Debian slim去掉文档、缓存、开发工具仍然可以apt install 优势比完整镜像小很多仍然可调试使用门槛低⚠️ 缺点仍然包含 OS → 攻击面较大体积比 distroless 大⚖️ 五、distroless vs slim 对比维度distrolessslim体积⭐ 最小⭐⭐ 较小安全性⭐⭐⭐ 极高⭐⭐ 中等可调试性❌ 几乎没有✅ 支持使用难度较高较低适用场景生产环境开发/测试 六、推荐组合多阶段 distroless 最佳实践# 构建阶段 FROM node:20 AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 运行阶段 FROM gcr.io/distroless/nodejs20 WORKDIR /app COPY --frombuilder /app . CMD [server.js] 思路总结构建阶段用“胖镜像”带工具运行阶段用“瘦镜像”无工具 七、安全最佳实践✅ 1. 使用最小权限USER nonroot✅ 2. 明确入口CMD [./app]避免 shell 形式CMD ./app # ❌✅ 3. 扫描漏洞推荐工具TrivyGrype✅ 4. 固定版本FROM node:20.11.1-slim避免FROM node:latest # ❌ 八、调试技巧distrolessdistroless 最大痛点无法 debug 解决方案方法 1临时切换 slimFROM node:20-slim方法 2使用 debug 版本gcr.io/distroless/base:debug方法 3Sidecar 调试在 Kubernetes 中使用 sidecar 容器。 九、适用场景总结场景推荐CI 构建多阶段生产环境distroless本地开发slim需要调试slim 十、总结多阶段构建 精简镜像是现代容器化的标配✅ 更小✅ 更安全✅ 更快建议逐步演进先引入多阶段构建再切换到slim最终在生产使用distroless补充FROM指令的本质FROM确实是以某个镜像为基础进行构建但在多阶段构建中每个FROM都创建一个独立的构建阶段它们之间是相互隔离的。多阶段构建的工作机制阶段1构建阶段FROM golang:1.22 AS builder ## ← 第1个FROM WORKDIR /app COPY . . RUN CGO_ENABLED0 GOOSlinux go build -o app基于golang:1.22镜像创建一个临时容器在这个容器中编译Go代码生成的app二进制文件存在于这个阶段的文件系统中阶段2运行阶段FROM gcr.io/distroless/base ## ← 第2个FROM WORKDIR /app COPY --frombuilder /app/app . ## ← 从阶段1复制文件 CMD [./app]重新开始基于distroless/base创建一个全新的容器这个阶段不知道阶段1的存在除了通过COPY --from显式复制的文件只包含运行时需要的最小文件关键点理解1.每个FROM都是独立的起点阶段1: golang:1.22 → 编译环境~1GB ↓ 编译出app二进制文件 ↓ 阶段2: distroless/base → 运行环境~10MB ↑ COPY --frombuilder 复制二进制文件2.为什么需要这样构建阶段需要完整的Go工具链编译器、标准库等运行阶段只需要编译好的二进制文件如果只用一个阶段最终镜像会包含整个Go环境浪费空间且不安全3.COPY --from的作用COPY --frombuilder /app/app . ## ↑ ↑ ↑ ## 从阶段1 阶段1的路径 复制到当前阶段类比理解可以把多阶段构建想象成搬家阶段1原房子你在一个大房子里golang:1.22整理所有物品打包好需要的东西阶段2新房子你搬到一个空房子distroless/base只把打包好的必需品搬进来结果新房子很干净没有原房子里的杂物单阶段构建的对比如果只用单阶段FROM golang:1.22 WORKDIR /app COPY . . RUN go build -o app CMD [./app]问题最终镜像包含整个Go环境~1GB而实际只需要一个几MB的二进制文件总结每个FROM创建一个独立的构建上下文阶段之间通过COPY --from阶段名传递文件最终镜像只包含最后一个阶段的内容这就是为什么可以前面以这个为基后面又以另一个为基多阶段构建的本质是用不同的基础镜像完成不同的任务最终只保留需要的结果。

相关文章:

Docker多阶段构建(Multi-stage Build)介绍(distroless镜像 / slim基础镜像、slim镜像)(FROM指令的本质)胖镜像瘦镜像、COPY . .、FROM命令

文章目录 🚀 多阶段构建与精简基础镜像(distroless / slim)实践指南📦 一、为什么需要优化镜像?❌ 问题 🧱 二、什么是多阶段构建(Multi-stage Build)?✅ 核心思想&#…...

如何构建企业级LLM评估体系:DeepEval框架的5大实战策略

如何构建企业级LLM评估体系:DeepEval框架的5大实战策略 【免费下载链接】deepeval The LLM Evaluation Framework 项目地址: https://gitcode.com/GitHub_Trending/de/deepeval 在LLM应用开发中,准确评估模型性能是确保生产可靠性的关键挑战。Dee…...

Qwen3-ASR-1.7B离线部署指南:无外网依赖,轻松集成到公司内网

Qwen3-ASR-1.7B离线部署指南:无外网依赖,轻松集成到公司内网 1. 为什么选择Qwen3-ASR-1.7B进行离线部署 在企业环境中,语音识别技术正逐渐成为提升工作效率的关键工具。然而,大多数开源语音识别模型要么依赖云端API,…...

如何快速打造个性化音乐界面:终极美化插件指南

如何快速打造个性化音乐界面:终极美化插件指南 【免费下载链接】refined-now-playing-netease 🎵 网易云音乐沉浸式播放界面、歌词动画 - BetterNCM 插件 项目地址: https://gitcode.com/gh_mirrors/re/refined-now-playing-netease 你是否厌倦了…...

随机森林在时间序列预测中的实践与应用

1. 随机森林在时间序列预测中的应用概述时间序列预测一直是数据分析领域的重要课题。传统方法如ARIMA虽然有效,但在处理复杂非线性关系时表现有限。随机森林作为一种强大的集成学习算法,近年来在时间序列预测中展现出独特优势。我最初接触这个领域是在20…...

ComfyUI-Florence2终极指南:3步掌握多任务视觉AI工作流

ComfyUI-Florence2终极指南:3步掌握多任务视觉AI工作流 【免费下载链接】ComfyUI-Florence2 Inference Microsoft Florence2 VLM 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Florence2 你是否曾梦想拥有一个能理解图像、识别物体、提取文字甚至回…...

机器学习算法选择:从原理到实践的全面指南

1. 机器学习算法选择的本质思考"哪种机器学习算法最好?"这个问题我几乎每天都会遇到。作为从业十年的数据科学家,我想说这个问题本身就暴露了一个关键误区——我们总在寻找所谓的"银弹"算法。但事实是,机器学习领域根本不…...

ServiceNow AgentLab:企业级AI智能体工作流自动化实战指南

1. 项目概述:当AI遇上企业级工作流自动化如果你在企业IT部门或者业务流程管理岗位待过,肯定对ServiceNow这个名字不陌生。它几乎是企业服务管理领域的“操作系统”,从IT服务台、IT运维到人力资源、财务、客户服务,无数复杂的业务流…...

矩阵分解在机器学习中的应用与实现技巧

1. 矩阵分解的本质与机器学习价值矩阵分解就像把一个复杂的乐高模型拆解成基础积木块的过程。在机器学习领域,这种技术通过将高维数据矩阵分解为低维表示,揭示了数据背后的潜在结构。我第一次接触矩阵分解是在推荐系统项目中,当时面对数百万用…...

构建企业级AI驱动测试自动化平台的完整架构实战

构建企业级AI驱动测试自动化平台的完整架构实战 【免费下载链接】testsigma Testsigma is an agentic test automation platform powered by AI-coworkers that work alongside QA teams to simplify testing, accelerate releases and improve quality across web, mobile, de…...

告别手机卡顿:Universal Android Debloater 让你的旧手机重获新生

告别手机卡顿:Universal Android Debloater 让你的旧手机重获新生 【免费下载链接】universal-android-debloater Cross-platform GUI written in Rust using ADB to debloat non-rooted android devices. Improve your privacy, the security and battery life of …...

基于反思工作流的智能翻译代理:原理、实践与定制化应用

1. 项目概述:一个基于反思工作流的智能翻译代理最近在GitHub上看到一个挺有意思的项目,叫translation-agent,是吴恩达(Andrew Ng)团队开源的一个实验性项目。简单来说,它不是传统的“输入-输出”式机器翻译…...

如何快速上手Minecraft PCL启动器:10个简单步骤打造你的游戏世界

如何快速上手Minecraft PCL启动器:10个简单步骤打造你的游戏世界 【免费下载链接】PCL Minecraft 启动器 Plain Craft Launcher(PCL)。 项目地址: https://gitcode.com/gh_mirrors/pc/PCL 想要轻松畅玩Minecraft却为复杂的启动和模组管…...

E7Helper:第七史诗玩家解放双手的终极自动化解决方案

E7Helper:第七史诗玩家解放双手的终极自动化解决方案 【免费下载链接】e7Helper 【Epic Seven Auto Bot】第七史诗多功能覆盖脚本(刷书签🍃,挂讨伐、后记、祭坛✌️,挂JJC等📛,多服务器支持📺&a…...

如何在Windows电脑上直接安装安卓应用?APK Installer终极指南

如何在Windows电脑上直接安装安卓应用?APK Installer终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想过在Windows电脑上直接运行安卓应…...

一款现代化、轻量级、跨平台的开源数据库管理客户端

👉 这是一个或许对你有用的社群🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 《项目实战(视频)》:从书中学,往事上…...

终极指南:5个简单步骤在电脑上免费畅玩Switch游戏

终极指南:5个简单步骤在电脑上免费畅玩Switch游戏 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 你是否梦想着在电脑上体验任天堂Switch的精彩游戏世界?Ryujin…...

HSTracker:macOS炉石传说智能助手,让每一局对战都充满策略智慧

HSTracker:macOS炉石传说智能助手,让每一局对战都充满策略智慧 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 还在为记不住对手手牌而烦恼&…...

高效因果卷积实战指南:CUDA加速的深度时序建模利器

高效因果卷积实战指南:CUDA加速的深度时序建模利器 【免费下载链接】causal-conv1d Causal depthwise conv1d in CUDA, with a PyTorch interface 项目地址: https://gitcode.com/gh_mirrors/ca/causal-conv1d 在当今人工智能领域,时间序列数据处…...

105个BitTorrent Tracker配置指南:彻底解决BT下载慢的终极方案

105个BitTorrent Tracker配置指南:彻底解决BT下载慢的终极方案 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 还在为BT下载速度慢而烦恼吗?下载热门…...

PPTX2HTML技术深度解析:纯前端PPTX转HTML的架构设计与实现

PPTX2HTML技术深度解析:纯前端PPTX转HTML的架构设计与实现 【免费下载链接】PPTX2HTML Convert pptx file to HTML by using pure javascript 项目地址: https://gitcode.com/gh_mirrors/pp/PPTX2HTML PPTX2HTML是一款基于纯JavaScript技术栈的开源工具&…...

ChanlunX缠论插件:3分钟实现专业级缠论分析可视化

ChanlunX缠论插件:3分钟实现专业级缠论分析可视化 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾经为复杂的缠论分析感到头疼?手工绘制笔、段、中枢耗费大量时间&#xf…...

PPTX2HTML终极指南:3分钟实现PPTX到HTML的完美转换

PPTX2HTML终极指南:3分钟实现PPTX到HTML的完美转换 【免费下载链接】PPTX2HTML Convert pptx file to HTML by using pure javascript 项目地址: https://gitcode.com/gh_mirrors/pp/PPTX2HTML PPTX2HTML是一款革命性的前端转换工具,让您的演示文…...

告别Docker Desktop!在Windows 11上用WSL2和Podman 4.6.1搭建轻量级容器环境(保姆级避坑指南)

告别Docker Desktop!在Windows 11上用WSL2和Podman 4.6.1搭建轻量级容器环境(保姆级避坑指南) 如果你是一名Windows平台的开发者,可能已经习惯了使用Docker Desktop来管理容器环境。但你是否知道,Docker Desktop在商业…...

AI智能体记忆框架ReMe:构建可管理、可查询、可演化的知识系统

1. 项目概述:ReMe——让AI智能体拥有“记忆”的框架最近在折腾AI智能体(Agent)开发的朋友,估计都绕不开一个核心难题:怎么让这些智能体“记住”之前发生过的事情?无论是构建一个能持续对话的客服机器人&…...

Win11Debloat:3步完成Windows系统清理与性能提升的终极指南

Win11Debloat:3步完成Windows系统清理与性能提升的终极指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...

B站视频缓存转MP4:个人备份的最后一公里解决方案

B站视频缓存转MP4:个人备份的最后一公里解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾遇到过这样的困境&#xff…...

Real-ESRGAN-ncnn-vulkan:AI图像超分辨率技术实战指南

Real-ESRGAN-ncnn-vulkan:AI图像超分辨率技术实战指南 【免费下载链接】Real-ESRGAN-ncnn-vulkan NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration. 项目地址: https://gitcode.com/gh_…...

告别Linux文件搜索缓慢:FSearch极速文件检索终极指南

告别Linux文件搜索缓慢:FSearch极速文件检索终极指南 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 还在为Linux系统中查找一个文件而花费数分钟时间吗&a…...

终极指南:10分钟让创维E900V22C变身专业4K播放器

终极指南:10分钟让创维E900V22C变身专业4K播放器 【免费下载链接】e900v22c-CoreELEC Build CoreELEC for Skyworth e900v22c 项目地址: https://gitcode.com/gh_mirrors/e9/e900v22c-CoreELEC 厌倦了家中闲置的电视盒子?想让旧设备焕发新生&…...