从“轻量级虚拟机”到理解容器本质
从“轻量级虚拟机”到理解容器本质今天正式开始了工程化部署的学习目标是从最底层的容器技术开始逐步掌握 Docker CI/CD 的完整流程。第一天的内容看似基础但深入进去才发现很多以前模模糊糊的概念一下子清晰了。这篇文章记录今天的学习历程不涉及镜像构建docker build那是明天的重头戏。一、重新认识容器它真不是虚拟机刚接触 Docker 时我和很多人一样习惯把它理解为“轻量级的虚拟机”。毕竟都能提供隔离环境都能打包应用。但今天学完原理后我终于能用一句话说清它们的本质区别容器运行在宿主机操作系统之上共享内核虚拟机运行在虚拟硬件之上拥有独立内核。这张图把关系画得很清楚容器架构 容器A (App) 容器B (App) \ / Docker Engine | 宿主机操作系统内核 (共享) | 物理硬件 虚拟机架构 虚拟机A (App完整OS) 虚拟机B (App完整OS) \ / Hypervisor (虚拟硬件层) | 宿主机操作系统 | 物理硬件三个关键对比启动速度容器秒级本质是启动一个进程虚拟机分钟级需要引导完整OS。资源开销容器仅占用应用本身大小虚拟机要消耗数GB内存和磁盘。隔离强度虚拟机硬件级强隔离容器是进程级隔离通过 Linux 内核的 namespace 和 cgroups 实现。那个让这一切发生的Hypervisor就是插在硬件和虚拟机之间的“造假软件”它把物理资源切分模拟成多套虚拟硬件让每个虚拟机都以为独占了一台机器。而容器根本没这层直接依赖宿主机内核的 namespace 做“障眼法”。二、容器世界的四个核心概念1. 镜像Image—— 只读模板包含运行应用所需的文件系统、依赖、环境变量和启动命令采用分层存储。比如osrf/ros:humble-desktop就是一个包含了 ROS2 Humble 完整桌面环境的镜像。镜像一旦构建就是只读的改动只能产生新镜像或容器层。2. 容器Container—— 镜像的运行实例在镜像的只读层之上加了一个可写层所有修改安装软件、写文件都发生在这里。容器删除后可写层数据默认丢失这就是为什么需要挂载。3. 仓库Registry—— 镜像的存储分发中心默认是 Docker Hub也可以配置国内加速器阿里云、中科大等提升拉取速度。镜像是通过仓库名:标签唯一标识的。4. 挂载Mount—— 数据持久化的关键主要有两种bind mount将宿主机指定目录映射到容器内适合开发环境实时共享文件。volumeDocker 管理的卷存储在/var/lib/docker/volumes/适合数据库等持久化场景。今天实操中用的就是 bind mount用-v 宿主机绝对路径:容器内路径实现。三、必须刻进肌肉记忆的七个命令今天重点练习了以下核心命令每个都亲手跑了一遍命令作用常用参数docker pull拉取镜像直接跟镜像名:标签如docker pull ros:humble-ros-basedocker run创建并启动容器-it交互终端-d后台--name命名-v挂载-p端口映射--rm退出自动删除docker exec在运行容器中执行命令-it交互式常用docker exec -it 容器名 /bin/bash进入容器docker cp宿主机与容器间拷贝文件docker cp 宿主机路径 容器名:路径或反过来docker images列出本地镜像docker images -q只显示IDdocker rmi删除镜像有容器占用时需先删容器或加-f强制删除docker build构建镜像明天重点-t 镜像名:标签需有 Dockerfile特别要记住的几个参数docker run -it-i保持标准输入打开-t分配伪终端通常一起用。docker run -v挂载目录必须使用绝对路径如-v /home/user/data:/data。docker run --rm退出后自动删除容器测试时非常好用。四、动手实操拉取 ROS 镜像并配置编译环境今天的任务是拉取 ROS 官方基础镜像进入容器安装编译工具完成文件读写和目录挂载验证。1. 拉取镜像dockerpull osrf/ros:humble-desktop因为之前配置了阿里云镜像加速器速度很快几分钟就下载完毕。2. 准备宿主机目录mkdir-p~/ros-docker-test/workspaceechoThis file is from HOST.~/ros-docker-test/workspace/host.txt3. 启动容器并挂载目录dockerrun-it\--nameros-lab\-v~/ros-docker-test/workspace:/root/workspace\osrf/ros:humble-desktop\/bin/bash注意我加上了/bin/bash这样/bin/bash就是容器的主进程PID 1后面退出时容器会停止。如果省略某些镜像的默认 entrypoint 可能让容器一直运行。4. 容器内配置编译环境apt-getupdateapt-getinstall-ybuild-essentialbuild-essential包含了gcc、g、make等 C/C 编译工具。装好后用gcc --version验证。5. 文件读写与挂载验证# 查看宿主机带来的文件cat/root/workspace/host.txt# 输出: This file is from HOST.# 在容器内创建文件echoThis file is from CONTAINER./root/workspace/container.txt# 编译一个简单的C程序测试cd/root/workspacecathello.cEOF #include stdio.h int main() { printf(Hello from inside container!\n); return 0; } EOFgcc hello.c-ohello ./hello一切都正常工作。然后我退出容器exit容器自动停止。6. 验证数据持久化在宿主机上查看cat~/ros-docker-test/workspace/container.txt# 输出容器内写入的内容ls~/ros-docker-test/workspace/# 所有文件都在接着删除容器docker rm ros-lab再查看宿主机目录文件依然存在。这证明了挂载卷的数据不会随容器删除而丢失它们是存储在宿主机上的。五、学习过程中的那些“为什么”1.exit和CtrlD有时为什么停不掉容器因为有些镜像有默认的 entrypoint 脚本脚本启动子进程并后台运行而你进入的/bin/bash只是其中一个子 shell。退出它只是关掉了一个终端主进程还在。解决方法是docker stop 容器名或使用CtrlP, CtrlQ只脱离终端而不停容器。2./bin/bash到底是个啥它是一个 Shell 程序我们进入容器后看到的命令提示符就是它提供的。在docker run最后加上/bin/bash就是明确告诉 Docker“把镜像的默认启动命令换成 bash”这样 bash 就成了 PID 1退出即停止容器。3. 重定向和的小坑写.dockerignore时用echoecho.git.dockerignore# 覆盖写入生成新文件echo*.md.dockerignore# 追加保留之前内容如果用多个后面的会把前面的覆盖掉。当然全部用追加也可以只是意图没那么明显。更好用的是 Here Document 语法一次性写入多行cat.dockerignoreEOF .git *.md *.log EOF这里EOF加引号是为了禁止变量替换保证内容原样写入。4. 镜像加速器是必须的吗不是必须但国内网络直接拉取 Docker Hub 很慢建议配置阿里云或中科大镜像加速器修改/etc/docker/daemon.json重启 Docker 即可。六、今日总结与下一步今天最大的收获是破除了“容器就是轻量虚拟机”的误解理解了容器共享内核、进程级隔离的本质。动手部分通过 ROS 镜像实战完整走通了pull - run - 环境配置 - 文件读写 - 挂载验证的全流程并顺便摸清了exec、cp、rmi等命令的用法。一些看似琐碎的细节如退出方式、重定向、bash 参数在实践中也都有了答案。

相关新闻

TradingAgents-CN多智能体金融交易框架:7个高级调试技巧与实战解决方案

TradingAgents-CN多智能体金融交易框架:7个高级调试技巧与实战解决方案

TradingAgents-CN多智能体金融交易框架:7个高级调试技巧与实战解决方案 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN TradingAgent…

2026/10/12 6:39:37 阅读更多 →
互联网大厂 Java 求职面试:Spring Boot、Kafka、微服务的探讨

互联网大厂 Java 求职面试:Spring Boot、Kafka、微服务的探讨

互联网大厂 Java 求职面试(涵盖 Spring Boot、Kafka、微服务等技术) 在这篇文章中,我们将探讨一次互联网大厂的 Java 求职面试。面试官是一位严肃的工程师,而候选人燕双非则是一位幽默风趣的程序员。整个面试过程围绕着多个技术点…

2026/10/5 4:12:22 阅读更多 →
瑞德克斯平台:用户体验路径的视角归纳

瑞德克斯平台:用户体验路径的视角归纳

在外汇行业语境里,表达越清晰、信息越透明,越容易建立稳定预期。在瑞德克斯平台的外汇服务中,从公开信息与使用体验出发,梳理其更值得肯定的能力点与细节表现。在外汇相关服务中,读者最在意的通常是信息是否清楚、提示…

2026/9/29 22:46:31 阅读更多 →

最新新闻

artcraft:用工程化流程实现可复现的艺术创作

artcraft:用工程化流程实现可复现的艺术创作

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个标题,我脑子里蹦出来的第一反应是“艺术”加“手艺”,听起来像是个做创意工具的项目。但真正让我感兴趣的,是它背后隐含的那层意思——把“art”这…

2026/10/12 8:28:03 阅读更多 →
概率方向论文投稿PEIS期刊全流程实战经验分享

概率方向论文投稿PEIS期刊全流程实战经验分享

1. 选刊与评估:为什么投Probability in the Engineering and Informational Sciences先说结论:如果你手头有一篇偏应用概率、随机模型或排队论方向的文章,又不想投那些动不动等一年多的“大刊”,那么这个期刊值得认真考虑。我第一…

2026/10/12 8:28:03 阅读更多 →
数据埋点如何发现用户非预期路径?从行为序列到产品优化实战

数据埋点如何发现用户非预期路径?从行为序列到产品优化实战

前阵子团队在做月度数据分析复盘,产品经理翻着埋点报表突然来了一句:“你看这里,为什么有三分之一的用户注册完之后,没有去完善资料,反而先去逛商城了?我们的新手引导明明写的是先完善资料再领权益啊。”这…

2026/10/12 8:28:03 阅读更多 →
AI辅助开题报告写作:8类工具拆解与选择指南

AI辅助开题报告写作:8类工具拆解与选择指南

你有没有发现,现在写开题报告的第一动作已经变了?过去大家默认的流程是:先沉下心看几十篇文献,再去找导师聊上好几轮,最后硬憋出一份选题说明。现在呢?我见过太多人的打开方式,是先在搜索框里输…

2026/10/12 8:28:03 阅读更多 →
基于RapidOCR的Python OCR源码:识别并返回HTML结构

基于RapidOCR的Python OCR源码:识别并返回HTML结构

简介:这是一套基于 rapidOCR 改造的完整 OCR 图片识别源码,面向需要将图片文字提取并结构化输出的 Python 开发者与项目集成者。它解决了传统 OCR 只返回纯文本、难以直接嵌入页面的问题,通过内置 /engine/ocr 接口接收 http 链接、本地文件或…

2026/10/12 8:28:03 阅读更多 →
8G显存本地部署MiniMax H3:视频生成与ComfyUI接入全攻略

8G显存本地部署MiniMax H3:视频生成与ComfyUI接入全攻略

第一次在8G显存的卡上把MiniMax H3本地版跑起来的时候,我自己都有点没缓过劲。最初印象里,视频生成模型想本地部署怎么也得16G显存起步,结果在量化方案的加持下不仅能跑,还能连续产出多条可用的漫剧分镜。这篇就把我从环境搭建、模…

2026/10/12 8:27:02 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →