image 代表每个应用程序的整体构筑环境
container 是根据image启用的不同沙盒
image
Docker image 是一个不可变(不可更改)的文件,其中包含应用程序运行所需的源代码、库、依赖项、工具和其他文件。
由于它们的只读质量,这些图像有时被称为快照。它们表示应用程序及其在特定时间点的虚拟环境。这种一致性是Docker的一大特点。它允许开发人员在稳定、统一的条件下测试和实验软件。
在某种程度上,由于图像只是模板,您无法启动或运行它们。您可以使用该模板作为基础来构建容器。容器最终只是一个正在运行的映像。一旦您创建了一个容器,它就会在不可变的图像上添加一个可写层,这意味着您现在可以修改它了。
创建容器所基于的图像库是单独存在的,不能更改。当您运行一个容器化环境时,您实际上在容器内创建了该文件系统(docker映像)的读写副本。这添加了一个容器层,该容器层允许修改图像的整个副本。
可以从一个镜像库中创建无限数量的Docker镜像。每次更改图像的初始状态并保存现有状态时,都会创建一个新模板,并在其顶部添加一个附加层。
因此,Docker image可以由一系列层组成,每个层都不同,但也源于前一层。图像层表示只读文件,一旦您使用它来启动虚拟环境,就会向其中添加容器层。
container
Docker container是一个虚拟化的运行时环境,用户可以在其中将应用程序与底层系统隔离。这些容器是紧凑的、可移植的单元,您可以在其中快速轻松地启动应用程序。
一个有价值的特性是容器内运行的计算环境的标准化。它不仅可以确保您的应用程序在相同的环境中工作,而且还简化了与其他队友的共享。
由于容器是自主的,它们提供了强大的隔离,确保它们不会中断其他正在运行的容器以及支持它们的服务器。Docker声称这些单元“提供了业内最强的隔离能力”。因此,在开发应用程序时,您不必担心保护机器的安全。
与虚拟机(VM)不同,虚拟化发生在硬件级别,容器在应用程序层进行虚拟化。他们可以利用一台机器,共享其内核,并虚拟化操作系统以运行独立的进程。这使得容器非常轻,使您能够保留宝贵的资源。