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
(会还原出原来的完整镜像,包含所有历史和标签)
类比 给一台电脑做整机硬盘克隆。 把一套未拆封的乐高套装(含说明书) 打包。
posted @ 2025-09-26 14:28  wangssd  阅读(27)  评论(0)    收藏  举报