容器和镜像

526 阅读3分钟

容器和镜像在 Docker 中是两个核心概念,它们各自扮演不同的角色。让我们深入了解一下它们的区别:

1. 镜像(Image)

  • 是什么:镜像是一个只读的、包含运行容器所需的所有文件、依赖项、配置和应用程序代码的模板。它相当于一个打包好的快照,是容器的基础。
  • 用途:镜像类似于虚拟机的磁盘镜像,但它不包含操作系统内核,它更像是一个程序的可执行文件或一个虚拟机的快照。
  • 特性
    • 只读:一旦镜像创建,它的内容不会改变。
    • 静态:镜像不能运行,但它包含了创建可运行容器所需的所有东西。
    • 层次结构:Docker 镜像由多个层组成,每一层代表了一个镜像的历史版本,可以共用这些层来节省空间。
  • 获取方式:通常你会从 Docker Hub 拉取镜像,也可以通过 Dockerfile 自行构建镜像。

2. 容器(Container)

  • 是什么:容器是镜像的运行时实例。当你通过镜像启动一个容器时,它就变成了一个独立的进程,运行你的应用程序。容器是镜像的动态版本,具有可读写的文件系统和分配的资源。
  • 用途:容器的目的是在隔离的环境中运行应用程序。它为应用程序提供了独立的执行环境,确保在不同的系统上可以一致运行。
  • 特性
    • 读写:容器可以读写,它在运行时可以创建、修改和删除文件。
    • 动态:容器是动态的,它可以运行、停止、重新启动等。运行时容器是基于镜像创建的,但与镜像不同,它具有可变的状态。
    • 可销毁:容器是短暂的,容器可以随时销毁并重新创建,不会影响到镜像。

总结:

  • 镜像:是创建容器的模板,是只读的,类似于快照。
  • 容器:是运行中的镜像实例,有读写权限,并且可以执行、修改数据。

一个常用的类比是:

  • 镜像类似于一个应用程序的安装包(静态、只读)。
  • 容器类似于安装并运行了这个应用程序的实例(动态、可操作)。

你可以从一个镜像创建多个容器,每个容器独立运行,但它们都基于同一个镜像。

抽象 就相当于我们使用的QQ QQ是一个镜像 登录不同的账号就是运行多个容器

  • QQ 软件本身 :相当于 Docker 镜像 。它是一个应用程序的模板,包含所有运行这个应用所需的代码和资源。
  • 登录不同的 QQ 账号 :相当于运行多个 容器 。每个登录的账号都是 QQ 软件的一个独立实例(容器)。这些实例都是基于同一个 QQ 软件(镜像),但每个实例运行时的状态、数据(比如聊天记录、好友列表)都是独立的,互不影响。

就像你可以通过一个 QQ 软件登录多个不同的账号(每个账号在自己独立的环境中运行),在 Docker 中,你也可以通过同一个镜像创建并运行多个容器,每个容器都有自己的环境和状态。