介绍
Docker是一种开源软件,旨在促进和简化应用程序开发。它是一组平台即服务产品,可为构建、部署和测试应用程序创建隔离的虚拟化环境。
尽管该软件掌握起来相对简单,但有一些 Docker 特定的术语可能会让新用户感到困惑。Dockerfiles、镜像、容器、卷和其他术语需要被掌握并且随着时间的推移应该成为第二天性。
尝试理解这些元素的基本作用是个好主意。它将加快学习如何与他们合作。许多用户提出的问题之一是:
Docker镜像与容器有哪些不同?Docker镜像和容器之间的主要区别是什么?
本文解释了这两者的不同之处,以及它们之间的关系。阅读更多内容以了解详情。
什么是 Docker 镜像?
Docker镜像与容器有什么区别?一个Docker形象是一个不变的(不变)文件,其中包含源代码,库,依赖关系,工具和其它应用程序所需的运行文件。
由于它们的只读质量,这些镜像有时被称为快照。它们代表特定时间点的应用程序及其虚拟环境。这种一致性是 Docker 的一大特色。它允许开发人员在稳定、统一的条件下测试和试验软件。
由于镜像在某种程度上只是模板,因此你无法启动或运行它们。你可以做的是使用该模板作为构建容器的基础。容器最终只是一个正在运行的镜像。创建容器后,它会在不可变镜像之上添加一个可写层,这意味着你现在可以对其进行修改。
Docker镜像与容器有什么关系?你创建容器的镜像库是单独存在的,不能更改。当你运行容器化环境时,你实际上是在容器内创建该文件系统(docker 镜像)的读写副本。这添加了一个容器层 ,允许修改镜像的整个副本。
你可以从一个镜像库创建无限数量的 Docker 镜像。每次更改镜像的初始状态并保存现有状态时,都会创建一个新模板,并在其顶部添加一个附加层。
因此,Docker 镜像可以由一系列层组成,每一层都不同,但也源自前一层。镜像层代表只读文件,一旦你使用它来启动虚拟环境,就会向其中添加容器层。
什么是 Docker 容器?
阿泊坞容器是一个虚拟化运行时环境,其中用户可从隔离底层系统的应用程序。这些容器是紧凑、便携的单元,你可以在其中快速轻松地启动应用程序。
一个有价值的特性是容器内运行的计算环境的标准化。它不仅可以确保你的应用程序在相同的环境中工作,而且还可以简化与其他团队成员的共享。
由于容器是自治的,它们提供了强大的隔离,确保它们不会中断其他正在运行的容器以及支持它们的服务器。Docker 声称这些单元“提供了业界最强的隔离能力”。因此,在开发应用程序时,你不必担心确保你的机器安全。
与在硬件级别进行虚拟化的虚拟机 (VM) 不同,容器在应用程序层进行虚拟化。他们可以利用一台机器,共享其内核,并将操作系统虚拟化以运行隔离的进程。这使得容器非常轻量级,让你可以保留宝贵的资源。
注意:如果你想详细了解虚拟机和容器之间的区别、它们的工作原理以及如何确定哪一种最适合你,请参阅我们的文章容器与虚拟机 (VM):有什么区别?
Docker 镜像与容器
Docker镜像与容器有什么区别?在讨论镜像和容器之间的区别时,将它们作为对立的实体进行对比是不公平的。这两个元素密切相关,并且是Docker 平台定义的系统的一部分。
如果你已经阅读了定义 docker 镜像和 docker 容器的前两节,你可能已经对两者如何建立关系有了一些了解。
镜像可以在没有容器的情况下存在,而容器需要运行镜像才能存在。因此,容器依赖于镜像并使用它们来构建运行时环境并运行应用程序。
Docker镜像与容器有哪些不同?这两个概念作为运行 Docker 容器过程中的基本组件(或更确切地说是阶段)而存在。拥有一个正在运行的容器是该过程的最后一个“阶段”,表明它依赖于之前的步骤和组件。这就是为什么 docker 镜像本质上管理和塑造容器的原因。
从 Dockerfile 到镜像再到容器
Docker镜像与容器有什么关系?这一切都始于定义如何构建特定 Docker 镜像的指令脚本。该脚本称为Dockerfile。该文件会自动执行概述的命令并创建一个Docker 镜像。
从 Dockerfile 创建镜像的命令是docker build
.
然后将镜像用作模板(或基础),开发人员可以复制它并使用它来运行应用程序。应用程序需要一个隔离的环境来运行——一个容器。
这个环境不仅仅是一个虚拟的“空间”。它完全依赖于创建它的镜像。源代码、文件、依赖项和二进制库都可以在 Docker 镜像中找到,它们构成了一个容器。
要从镜像创建容器层,请使用命令docker create
。
最后,从现有镜像启动容器后,启动其服务并运行应用程序。
从容器创建 Docker 镜像。
Docker镜像与容器有什么关系?如果你对初始镜像进行了更改并希望保留它以备将来使用,你可以通过截取容器当前状态的屏幕截图来保存修改后的镜像。通过这样做,你可以在镜像之上附加一个容器层,最终构建一个新的不可变镜像。因此,你最终会得到来自同一个文件系统的两个 Docker 镜像。
结论
Docker镜像与容器有什么区别?一旦你了解了创建容器的过程,你将很容易认识到镜像和容器的不同之处。阅读本文后,你现在应该对什么是 Docker 镜像、什么是容器以及它们是如何连接的有了很好的了解。
既然你知道了镜像和容器之间的区别,请查看我们关于Docker Copy 与 Add 命令的文章,了解如何以正确的方式在 Docker 中复制文件。