docker 镜像/容器
根据镜像启动容器,并进入容器:
docker run -it --privileged --entrypoint bash 镜像名
# 如果镜像已经存在,直接启动 docker run -d --name flask_container -p 5000:5000 flask_app:v1
flask_container 容器名
flask_app:v1 镜像名
镜像名称 (Image Name)
-
标识镜像的主体名称
-
通常包含仓库地址和镜像名
-
格式:
[仓库地址/]镜像名
标签 (Tag)
-
标识镜像的特定版本或变体
-
相当于版本号或描述符
-
默认标签是
latest
| 特性 | Docker 镜像 | Docker 容器 |
|---|---|---|
| 本质 | 只读的模板或快照。包含创建容器所需的文件和元数据。 | 镜像的运行实例。是一个可写的、隔离的进程环境。 |
| 状态 | 静态的、不可变的。一旦创建,内容就不会改变。 | 动态的、有状态的。可以被启动、停止、删除,其内部状态会改变。 |
| 存储 | 由一系列只读层组成,通过联合文件系统叠加。 | 在镜像的只读层之上,添加一个可写的容器层。 |
| 创建方式 | 通过 docker build 命令,根据 Dockerfile 构建。 |
通过 docker run 命令,从镜像启动。一个镜像可以创建多个容器。 |
| 持久性 | 镜像本身是持久的,删除容器不会影响镜像。 | 默认情况下,容器停止后,其可写层的数据会随容器删除而丢失(需用卷来持久化)。 |
| 类比 | 面向对象中的“类” 或 安装程序的 .iso 文件。 |
由类 new 出来的“对象” 或 安装好并正在运行的操作系统。 |
总结:
| 动作 | 影响对象 | 说明 |
|---|---|---|
docker build -t my-image . |
镜像 | 根据当前目录的 Dockerfile 创建一个名为 my-image 的镜像。 |
docker run -d --name my-container my-image |
容器 | 从 my-image 镜像创建并启动一个名为 my-container 的容器。 |
docker rmi my-image |
镜像 | 删除名为 my-image 的镜像(如果已有容器基于它,需先删除容器)。 |
docker rm my-container |
容器 | 删除名为 my-container 的容器(其上的可写层数据会丢失)。 |
镜像和容器的关系:
-
镜像(Image):像一个安装了操作系统和软件的虚拟机模板(.vmx 文件)。它是只读的、分层的、静态的。
-
容器(Container):像是从这个模板启动的一个正在运行(或已停止)的虚拟机实例。它是可写的、有当前状态的、动态的。
基于这个比喻:
-
导出容器:相当于给这个正在运行的虚拟机拍一个快照,然后打包成一个文件。这个文件包含了操作系统、软件以及你在里面创建的所有文件、做的所有配置修改。
-
导出镜像:相当于把最初的虚拟机模板打包成一个文件。它不包含任何后续的运行时数据或修改。
| 特性 | 导出容器 (docker export) | 导出镜像 (docker save) |
|---|---|---|
| 命令 | docker export <容器名/ID> > 容器名.tar |
docker save -o 镜像名.tar <镜像名:标签> |
| 导出对象 | 一个容器的文件系统快照 | 一个或多个镜像(包括其历史层) |
| 导出内容 | 扁平化的容器当前文件系统状态。不包含历史记录、元数据(如环境变量、入口点命令、卷信息等)。 | 完整的分层文件系统,以及所有元数据(标签、环境变量、构建历史、命令等)。 |
| 主要用途 | 迁移或备份容器的当前状态。例如,将正在开发的应用程序及其环境快速打包发给别人。 | 备份或分发镜像本身,以便在其他地方使用 docker load 加载。例如,将自定义镜像保存到文件,用于离线环境部署。 |
| 再导入命令 | docker import - 新镜像名:标签(会创建一个新的扁平镜像) |
docker load(会还原出原来的完整镜像,包含所有历史和标签) |
| 类比 | 给一台电脑做整机硬盘克隆。 | 把一套未拆封的乐高套装(含说明书) 打包。 |

浙公网安备 33010602011771号