Docker 的镜像(Image)容器(Container)是其最核心的两个概念,理解它们的关系是掌握 Docker 的关键。

简单来说,镜像是静态的模板,而容器是这个模板运行起来的动态实例。这非常类似于面向对象编程中的“类”与“对象”的关系。

镜像 (Image)

镜像是一个只读的模板它打包了运行一个应用所需的一切:代码、运行时环境、系统工具、系统库和设置

静态性:镜像本身是只读的,无法被修改。

分层结构:镜像由多个只读层(Layer)叠加而成。例如,一个 Web 应用的镜像可能由“操作系统层”、“语言环境层”、“依赖库层”和“应用代码层”堆叠而成。这种分层设计使得镜像非常高效,不同的镜像可以共享相同的基础层,节省存储空间和传输时间。

用途:用于构建和分发应用。你可以从 Docker Hub 这样的仓库拉取(docker pull)现成的镜像,也可以自己通过 Dockerfile 构建。

容器 (Container)

容器是镜像运行时的实例。当你使用一个镜像启动一个容器时,Docker 会在镜像的只读层之上,添加一个可写的容器层

动态性:容器是一个正在运行的进程,拥有独立的用户空间、网络和文件系统视图。你可以启动、停止、移动或删除容器。

可写层:所有对容器文件系统的修改(如生成日志、写入数据)都发生在这个顶层的可写层。当容器被删除时,这个可写层也会被删除,而底层的镜像保持不变。

用途:用于实际运行和部署应用。一个镜像可以同时运行出多个相互隔离的容器。

核心区别总结

特性 镜像 (Image) 容器 (Container)
本质 静态的、只读的模板 动态的、运行中的实例
类比 类 (Class) 对象 (Object)
文件系统 只读,由多个层堆叠而成 在镜像之上增加一个可写层
生命周期 持久化存储,除非被显式删除 短暂的,可以随时创建和销毁
常用命令 docker imagesdocker pulldocker build docker rundocker psdocker stopdocker rm

一个形象的比喻:如果把 Docker 镜像比作一个光盘,那么容器就是用这张光盘安装并运行起来的操作系统。你可以用同一张光盘(镜像)在多台电脑上安装出多个独立的操作系统(容器)。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐