在 Docker 中,镜像(Image) 和 容器(Container) 是核心概念,它们的关系可以通过以下比喻和理解来明确:
1. 镜像(Image)
- 定义:镜像是只读的模板或蓝图,包含运行应用程序所需的文件系统、依赖、配置和环境(例如代码、运行时环境、库等)。
- 特点:
- 静态的、不可修改的(类似操作系统的安装光盘)。
- 通过分层存储(Layer)实现高效复用和共享。
- 来源:可通过 Dockerfile 构建,或从远程仓库(如 Docker Hub)拉取。
2. 容器(Container)
- 定义:容器是镜像的运行实例,相当于基于镜像启动的一个独立且轻量级的进程环境。
- 特点:
- 动态的、可读写(在镜像基础上添加一个可写层)。
- 容器内的修改不会影响原始镜像,但可以通过提交(
docker commit
)生成新镜像。
- 生命周期:可以启动、停止、删除或暂停。
3. 关系类比
镜像 → 类(Class)
容器 → 对象(Object)
(镜像是模板,容器是模板的实例化。)镜像 → 安装包(如
Windows.iso
)
容器 → 安装好的操作系统(运行中的系统)。
4. 关键区别
| 特性 | 镜像(Image) | 容器(Container) |
|—————-|—————————|———————————–|
| 状态 | 只读、静态 | 可读写、动态运行环境 |
| 存储方式 | 分层存储(共享底层资源) | 在镜像基础上添加可写层 |
| 生成方式 | Dockerfile 构建或拉取 | 通过 docker run
从镜像创建 |
| 持久化 | 永久存在 | 停止后可删除,数据需卷(Volume)保存 |
5. 操作示例
# 从镜像创建并启动容器
docker run -it ubuntu:20.04 /bin/bash
# 查看本地镜像列表
docker images
# 查看运行中的容器
docker ps
# 将容器保存为新镜像
docker commit <容器ID> my-new-image
6. 总结
- 镜像是基础,容器是运行态:没有镜像就无法创建容器。
- 一对一或多对一:一个镜像可以同时启动多个容器(实例),每个容器相互隔离。
- 数据持久化:容器的改动默认随容器删除而丢失,需通过卷(Volume)或绑定挂载保留数据。
理解这一关系是掌握 Docker 的核心基础!
内容由零声教学AI助手提供,问题来源于学员提问