Docker 的镜像(Image)和容器(Container)
·
Docker 的镜像(Image)和容器(Container)是其最核心的两个概念,理解它们的关系是掌握 Docker 的关键。
简单来说,镜像是静态的模板,而容器是这个模板运行起来的动态实例。这非常类似于面向对象编程中的“类”与“对象”的关系。
镜像 (Image)
镜像是一个只读的模板,它打包了运行一个应用所需的一切:代码、运行时环境、系统工具、系统库和设置。
静态性:镜像本身是只读的,无法被修改。
分层结构:镜像由多个只读层(Layer)叠加而成。例如,一个 Web 应用的镜像可能由“操作系统层”、“语言环境层”、“依赖库层”和“应用代码层”堆叠而成。这种分层设计使得镜像非常高效,不同的镜像可以共享相同的基础层,节省存储空间和传输时间。
用途:用于构建和分发应用。你可以从 Docker Hub 这样的仓库拉取(docker pull)现成的镜像,也可以自己通过 Dockerfile 构建。
容器 (Container)
容器是镜像运行时的实例。当你使用一个镜像启动一个容器时,Docker 会在镜像的只读层之上,添加一个可写的容器层。
动态性:容器是一个正在运行的进程,拥有独立的用户空间、网络和文件系统视图。你可以启动、停止、移动或删除容器。
可写层:所有对容器文件系统的修改(如生成日志、写入数据)都发生在这个顶层的可写层。当容器被删除时,这个可写层也会被删除,而底层的镜像保持不变。
用途:用于实际运行和部署应用。一个镜像可以同时运行出多个相互隔离的容器。
核心区别总结
| 特性 | 镜像 (Image) | 容器 (Container) |
|---|---|---|
| 本质 | 静态的、只读的模板 | 动态的、运行中的实例 |
| 类比 | 类 (Class) | 对象 (Object) |
| 文件系统 | 只读,由多个层堆叠而成 | 在镜像之上增加一个可写层 |
| 生命周期 | 持久化存储,除非被显式删除 | 短暂的,可以随时创建和销毁 |
| 常用命令 | docker images, docker pull, docker build |
docker run, docker ps, docker stop, docker rm |
一个形象的比喻:如果把 Docker 镜像比作一个光盘,那么容器就是用这张光盘安装并运行起来的操作系统。你可以用同一张光盘(镜像)在多台电脑上安装出多个独立的操作系统(容器)。
更多推荐


所有评论(0)