Docker 镜像与容器的区别:新手最容易混淆的几个概念

举报
yd_279578268 发表于 2026/10/22 15:18:41 2026/10/22
【摘要】 镜像是只读模板,容器是运行实例。本文用“图纸与房子”的比喻,讲清 docker images 与 docker ps 的区别、为什么容器不是小虚拟机,以及 Dockerfile 到镜像再到容器的完整流水线。

刚接触 Docker 的人,十有八九都会被两个词绕晕:镜像(Image)和容器(Container)。它们长得像、名字常连在一起出现,docker images 和 docker ps 两条命令一敲,更是让人分不清谁是谁。今天就把新手最容易混淆的几个概念一次讲清楚。

一、镜像是“图纸”,容器是“房子”
最经典的比喻:镜像是盖房子的图纸和预制件,容器是照着图纸真正盖起来、能住人的房子。镜像是一个只读的模板,里面打包了运行某个应用需要的一切:操作系统层、运行环境、依赖库、应用代码和默认启动命令。而容器是镜像的一个运行实例——把镜像“跑起来”,就得到了一个隔离的、活的进程环境。

关键区别有三点。第一,镜像是静态的、只读的,你可以把它存进仓库、传给别人,但它自己不会运行;容器是动态的、可写的,它是真正干活的那个。第二,一个镜像可以启动出无数个容器,就像一张图纸可以盖出无数栋房子,这些容器相互隔离、互不干扰。第三,容器被删除后,它里面产生的数据也会跟着消失(除非你用了数据卷),而镜像本身不受影响。

二、docker images 和 docker ps 看到的不是一回事
新手常问:为什么 docker images 里能看到 ubuntu,docker ps 里却看不到?因为前者列出的是本地“图纸库”——你下载或构建好的所有镜像;后者列出的是“正在运行的房子”——当前活着的容器。想看所有容器(包括停止的),要加 -a:docker ps -a。一个常见的误操作是:容器删了又建,却发现磁盘越来越满,往往是因为停止的容器和悬空镜像越积越多,定期用 docker system prune 清理是个好习惯。

三、“进入容器”不等于“进入镜像”
docker exec -it 进入的是正在运行的容器,你在里面改文件、装软件,影响的是这个容器实例。而镜像本身是只读的,你没法“进入”一个镜像去改它——想改,得先把容器里的变化提交成新镜像(docker commit),或者更推荐的做法:写一个 Dockerfile 重新构建。很多新手在容器里折腾半天,容器一删改动全没了,就是没分清这一层。

四、容器不是“小虚拟机”
这是另一个高频误区。虚拟机是“房子里再盖一套房”——每个虚拟机都带一个完整的操作系统内核,笨重但隔离彻底;容器是“大房子里隔出单间”——所有容器共享宿主机的操作系统内核,只在进程、网络、文件系统等维度做隔离。所以容器启动是秒级的、镜像只有几十到几百 MB,而虚拟机往往要几 GB、启动要几分钟。但代价是:Linux 容器跑不了 Windows 内核的应用,隔离强度也不如虚拟机,选型时要心里有数。

五、Dockerfile、镜像、容器的流水线关系
把三者串起来就是一条流水线:Dockerfile 是“施工说明书”(文本文件,一条条写清楚怎么装环境、拷代码),docker build 按说明书做出镜像(图纸定稿),docker run 把镜像跑成容器(交房入住)。新手建议亲手走一遍:写个简单的 Dockerfile,build 出自己的第一个镜像,再 run 起来访问一次,这个流程走通,镜像和容器的区别就刻进脑子里了。

总结一句话:镜像是“装应用的只读模板”,容器是“镜像跑起来的可写实例”。记住“图纸与房子”这个比喻,再遇到 docker images、docker ps、docker exec 这些命令,就不会张冠李戴了。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。