从“轻量级虚拟机”到理解容器本质
从“轻量级虚拟机”到理解容器本质今天正式开始了工程化部署的学习目标是从最底层的容器技术开始逐步掌握 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/7/22 10:07:38阅读更多 →
告别无效熬夜!2026毕业论文神仙工具|Okbiye一站式搞定所有难题[特殊字符]

告别无效熬夜!2026毕业论文神仙工具|Okbiye一站式搞定所有难题[特殊字符]

谁懂啊家人们!写毕业论文真的是大学生四年最大噩梦😭 开题迷茫没思路、写稿空洞没内容、外文文献看不懂、排版格式天天错、降重之后AI超标、答辩PPT无从下手…… 以前写论文,电脑堆满各种软件、网页来回切换,熬大夜改出来的稿子…

2026/7/22 10:07:38阅读更多 →
五款主流防伪认证芯片横向对比:从 1-Wire 到 PUF

五款主流防伪认证芯片横向对比:从 1-Wire 到 PUF

给配件选防伪芯片,圈子里绕不开几颗经典型号。把资料翻了一遍,结合自己用过和评估过的型号,从认证机制、算法、接口、功耗几个维度做个梳理,方便选型时对照。五颗芯片的基本盘型号厂商认证机制算法接口特点ATSHA204AMicrochip对称…

2026/7/22 10:05:38阅读更多 →
TI VPDMA中断掩码寄存器详解:嵌入式视频处理中断管理实战

TI VPDMA中断掩码寄存器详解:嵌入式视频处理中断管理实战

1. 项目概述 在嵌入式视频处理系统的开发中,尤其是面对德州仪器(TI)这类高性能SoC时,中断管理往往是决定系统实时性和稳定性的“胜负手”。我处理过不少项目,从简单的视频采集到复杂的多路画中画合成,一个共…

2026/7/22 11:13:49阅读更多 →
高考英语熟词生义系统训练方案

高考英语熟词生义系统训练方案

1. 项目背景与核心价值 作为一名带过五届高三毕业班的英语教师,我深知"熟词生义"是高考英语备考中最容易被忽视却又至关重要的环节。这个看似简单的概念,实则是学生阅读理解失分的重灾区——根据2021年高考英语试卷分析,全国卷阅读…

2026/7/22 11:13:49阅读更多 →
远程 MySQL 下「附近球馆」接口从 5 秒优化至 300ms 实战

远程 MySQL 下「附近球馆」接口从 5 秒优化至 300ms 实战

摘要 Spring Boot 远程库场景里,一次列表接口串行 4 次 SQL,冷启动可达数秒。记录一次把 count 砍掉、改 JOIN 聚合、前端并行请求后的效果。 正文(Markdown,可直接贴 CSDN) 远程 MySQL 下,把「附近球馆」…

2026/7/22 11:13:49阅读更多 →
TM4C1292NCZAD模拟比较器:从原理到实战的嵌入式电压监控方案

TM4C1292NCZAD模拟比较器:从原理到实战的嵌入式电压监控方案

1. 项目概述与核心价值在嵌入式系统开发,尤其是涉及模拟信号监控、电源管理或电机控制的场景里,我们经常需要判断一个电压是否超过了某个预设的阈值。你可能会想到用一颗外部的电压比较器芯片,比如LM393,配合电阻分压网络来实现。…

2026/7/22 11:13:49阅读更多 →
包装运输测试斜面冲击为何大包装件做的更多?ISTA3E斜面冲击更受大家选择的原因?

包装运输测试斜面冲击为何大包装件做的更多?ISTA3E斜面冲击更受大家选择的原因?

ISTA 3E 是托盘单元化集合包装专用运输测试标准,斜面冲击作为标准中二选一的强制水平冲击项目,在大型木箱、托盘整件测试中使用频率远高于小型纸箱,主要由标准范围、工况匹配、设备适配、包装结构四大维度决定。一、标准适用范围限定测试对象…

2026/7/22 11:13:49阅读更多 →
运维!明明掌握Linux、云、网络多年的功底,却只能困在重复工作中,未免太可惜

运维!明明掌握Linux、云、网络多年的功底,却只能困在重复工作中,未免太可惜

运维!明明掌握Linux、云、网络多年的功底,却只能困在重复工作中,未免太可惜 不少运维人,哪怕是早九晚六也会有的遗憾:深耕运维几年,虽然算是铁饭碗,却很难升上去。明明就吃透Linux操作系统、云…

2026/7/22 11:11:49阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →