本文将探讨Docker镜像和容器之间的差异,帮助您了解如何以及何时使用它们。
Docker容器化平台有助于使用容器轻松创建、部署和运行应用程序。如果您是Docker新手,您可能想知道Docker映像与Docker容器有何不同。尽管Docker镜像和容器具有相似的目的,但它们有不同的用途。镜像是环境的快照,容器运行软件。将容器视为软件的运输容器-它保存文件和程序等重要内容,以便应用程序可以有效地从生产者交付给消费者。

Docker概述

DockerFlatpakSnaps等解决方案都有相同的目标,即将应用程序打包到单个捆绑包中以安装在任何Linux发行版中。

SolomonHykes2013年将Docker作为一个开源项目推出。他们的第一个商业版本已于2014年准备投入生产。

容器化的最大好处之一是,它使开发人员能够将其应用程序与在任何Linux发行版上运行所需的所有依赖项打包在一起。这样就无需手动安装每个依赖项。

多个容器可以同时运行,每个容器都基于相同或不同的映像。Docker在创建操作系统的多个实例方面与虚拟机类似。但是,Docker允许您创建在同一操作系统上运行的容器。因此,在给定的硬件组合上可以运行比虚拟机更多的容器。

Docker容器甚至可以在虚拟机中运行。与创建虚拟机相比,Docker提供了额外的抽象和自动化层,使其更易于使用。

容器化平台在开发人员和系统管理员中越来越受欢迎,因为它包含应用程序的完整文件系统及其所有依赖项。此设置支持不可变的基础架构并保证部署是幂等的-无论您重复操作多少次,它们都将保持完全相同。

Docker守护进程在后台运行以管理映像、容器等。客户端和守护程序使用套接字或通过RESTfulAPI进行通信。

Xnip2024-02-20_10-56-18.png

什么是Docker镜像?

图像是只读模板,包含创建容器的说明。Docker镜像创建在Docker平台上运行的容器。

将图像想象成容器运行时内容的蓝图或快照。

图像由多个堆叠层组成,就像照片编辑器中的层一样,每个层都会改变环境中的某些内容。映像包含运行应用程序的代码或二进制文件、运行时、依赖项和其他文件系统对象。该映像依赖于主机操作系统(OS)内核。

例如,要构建Web服务器映像,请从包含UbuntuLinux(基本操作系统)的映像开始。然后,在上面添加Apache和PHP等软件包。

您可以使用Dockerfile手动构建映像,Dockerfile是一个包含创建Docker映像的所有命令的文本文档。您还可以使用命令从称为注册表的中央存储库或DockerHub等存储库中提取映像dockerpull[name]

Docker用户运行一个镜像时,它会成为一个或多个容器实例。容器的初始状态可以是开发人员想要的任何状态——它可能有一个已安装和配置的Web服务器,或者只有一个以root身份运行的bashshell。但实际上,大多数映像都包含一些预配置的软件和配置文件。

Docker镜像是不可变的,因此一旦创建就无法更改。如果您需要更改某些内容,请使用您的更改创建另一个容器,然后将其另存为另一个图像。或者,只需使用现有映像作为基础来运行新容器并更改该容器即可。

成功构建应用程序后,Docker可以进一步将镜像导出到其他镜像中。彼此派生的图像通常称为父图像和子图像。

一张图片可能有多个标签,但每个标签都是唯一的。标签区分图像,例如ubuntu:latestubuntu:14.04

映像本身并不运行,但您可以从Docker映像创建并运行容器。

什么是容器?

容器是一个隔离的地方,应用程序在其中运行,不会影响系统的其余部分,也不会让系统影响应用程序。由于容器是隔离的,因此非常适合安全运行的软件,例如数据库或Web应用程序,这些软件需要访问敏感资源,而无需向系统上的每个用户授予访问权限。

由于容器在Linux上本机运行并共享主机的内核,因此它是轻量级的,不会比其他可执行文件使用更多的内存。如果您停止容器,它不会自动重新启动,除非您以这种方式配置它。然而,容器比虚拟机更高效,因为它们不需要整个操作系统的开销。它们与其他容器共享单个内核,并在几秒钟而不是几分钟内启动。

您可以使用容器将应用程序及其所需的所有组件打包,然后将其作为一个单元全部发送出去。这种方法很受欢迎,因为它消除了开发、质量保证和生产环境之间的摩擦,从而实现了更快的软件交付。在软件容器内构建和部署应用程序可以消除与其他开发人员协作编写代码时“在我的机器上运行”的问题。

这些应用程序还可以在任何基础设施和任何云中运行。您可以将应用程序及其底层基础设施与其他应用程序隔离。

Docker镜像与容器

Docker镜像在Docker容器中执行代码。您可以在Docker映像上添加核心功能的可写层来创建正在运行的容器。

Docker容器视为正在运行的映像实例。您可以从同一个映像创建许多容器,每个容器都有自己独特的数据和状态。

虽然镜像不是创建容器的唯一方式,但却是一种常用的方法。

采用容器的一个主要好处是开发、操作和测试的标准化和简化。然而,为了让团队充分利用容器,他们需要确保开发人员、运营工程师和测试人员创建一致的环境。

持续集成和持续部署(CI/CD)管道可以构建、测试和打包容器。然后,部署将该容器分发到运行时环境,在该环境中它可以作为应用程序的一部分执行。

结论

容器和镜像都允许用户指定应用程序依赖项和配置,并描述机器运行该应用程序所需的一切。然而,容器和镜像有不同的生命周期。例如,您可以在PivotalCloudFoundry等基于容器的系统上使用容器,但不能使用映像。同样,您可以在HerokuOpenShift等非容器系统中使用映像,但不能使用容器。

这不是选择容器或图像的问题。它们相互依赖,并且您需要两者都与Docker一起工作。

现在您已经了解了Docker映像容器之间的细微差别,您可以充分利用Docker平台。使用Docker时,自动化可帮助您快速集成并释放开发人员时间来创建新的应用程序功能。

转载请注明出处:https://www.cloudnative-tech.com/introduction/5996.html