Docker 映像和容器之间有什么区别?
Docker 映像和容器都是应用程序部署技术。按传统做法,要运行任何应用程序,必须安装与计算机操作系统匹配的应用程序版本。但您现在可以创建能够在所有类型的设备和操作系统上运行的单个软件包或容器。Docker 是一个可将软件打包到容器的软件平台。Docker 映像是只读模板,包含有关创建容器的说明。Docker 映像是容器内的库和依赖项的快照或蓝图,应用程序需要这些库和依赖项才能运行。
为什么要使用 Docker 映像和容器?
开发人员可使用打包软件以便在任何目标系统上运行。以前,必须专门为不同的目标系统打包软件。例如,如果您想让应用程序在 macOS 和 Windows 上运行,则必须更改应用程序设计并针对不同的系统打包应用程序。
借助容器化,软件应用程序可在分布式、跨平台的硬件架构中作为微服务运行。由于容器具有高度的可移植性,因此这些软件应用程序几乎可以在任何计算机上运行,並且可快速部署。例如,一个企业应用程序可能有数百个微服务。它们可以作为容器在专用数据中心和云端中的多台计算机和虚拟机(VM)上运行。
工作原理:Docker 映像与Docker 容器
Docker 是一个容器化平台,可用于将软件打包到容器中,并在目标计算机上运行它们。Docker 容器在安装 Docker 引擎的任何计算机或虚拟机上运行。并且,这些容器可在不需要了解底层系统架构的情况下运行。Docker 引擎只能在 Linux 操作系统上运行。Docker 容器是使用 Docker 容器化平台建立的容器;还有其他较为冷门的容器化平台。
Docker 容器的工作原理
Docker 容器是一个运行时环境,其中包含运行应用程序代码所需的所有必要组件,例如代码、依赖项和库,而无需使用主机依赖关系。此容器运行时在服务器、计算机或云实例上的引擎中运行。该引擎根据可用的底层资源运行多个容器。
要部署和扩展一组容器以在不同的计算机或虚拟机之间进行有效通信,需要拥有像 Kubernetes 这样的容器编排平台。无论计算机位于本地还是云端,此平台都可提供帮助。Kubernetes 在容器操作的上下文中管理多台计算机,这些计算机称为集群。
Docker 映像的工作原理
Docker 映像或容器映像是用于创建容器的独立可执行文件。此容器映像包含容器运行所需的所有库、依赖项和文件。Docker 映像可共享且可移植,因此可以同时在多个位置部署同一个映像,非常类似于软件二进制文件。
可以将映像存储在注册表中,以跟踪复杂的软件架构、项目、业务部门和用户组访问权限。例如,公有 Docker Hub 注册表包含操作系统、编程语言框架、数据库和代码编辑器等映像。
键盘命令:Docker 映像与Docker 容器
可以使用带有参数的命令来操作 Docker 容器。标准命令格式为 docker [options] [command] [arguments]。
容器命令
下表包含常用的容器命令。Docker 文档中还列出了其他几个命令。
命令 |
解释 |
docker ps -a |
列出所有容器。-a 标志显示正在运行和未运行的容器。要仅显示正在运行的容器,可以省略此标志。 |
docker rename [container] [new_name] |
将给定的容器重命名为 new_name。 |
docker start [container] |
运行给定的容器。 |
docker stop [container] |
停止给定容器。 |
docker wait [container] |
让给定容器等到其他正在运行的容器停止。 |
映像命令
与容器命令相比,映像命令较少。
Docker build -t image_name . |
从当前目录中的文件构建标记为 image_name 的 Docker 映像。 |
docker create [image] |
根据给定的映像创建未运行的容器。 |
docker run [image] |
根据给定的映像创建和运行容器。 |
从 Docker 映像创建 Docker 容器
要从特定 Docker 映像创建容器,请在计算机上启动引擎。然后,使用基本的 Docker 运行命令。
以下是示例命令:
docker run -it MyImage bash
此命令根据名为 MyImage 的映像文件创建容器。-it 在运行中的容器内创建一个伪终端。通过将 bash 指定为命令,在容器内打开一个 bash 终端。
主要区别:Docker 映像与.Docker 容器
Docker 容器是独立的、可运行的软件应用程序或服务。另一方面,Docker 映像是加载到容器上以运行的模板,类似于一组指令。
存储映像以供共享和重复使用,但在应用程序的生命周期内创建和销毁容器。接下来我们会给出更多区别。
源
可以从 Dockerfile 创建 Docker 映像,Dockerfile 是类似于配置文件的人类可读文本文件。Dockerfile 包含构建映像的所有说明。必须将 Dockerfile 以及所有关联的库和依赖项放在一个文件夹中,才能顺利构建映像。
相比之下,可以直接从 Docker 映像文件中创建 Docker 容器。
构成
Docker 映像文件由映像层组成,以保持较小的文件规模。 每个层代表对映像执行的更改。这些层是只读的,可以在多个容器之间共享。
作为映像实例的 Docker 容器也包含层。但是,Docker 容器的顶部还有额外的可写入层,称为容器层。容器层允许读写访问。容器层还允许将容器内执行的任何更改与基于同一映像的其他容器隔离。
可变性
Docker 映像是不可变的,这意味着它们一旦创建就无法修改。如果需要对映像进行更改,则必须使用所需的修改创建新映像。
相比之下,容器是可变的,可在运行时进行修改。在容器内执行的更改仅会影响此特定容器,不会影响其关联的映像。更改的一些示例包括编写新文件、安装软件或修改配置。
使用时机:Docker 映像与Docker 容器
在创建和部署软件时,可以将 Docker 映像和容器结合使用。
只需使用容器构建一次应用程序,即可在任何地方运行这些应用程序。可以根据需要快速启动、停止和重启容器。因此,可以很轻松地根据应用程序的需求纵向扩展或缩减。
话虽如此,同时使用映像和容器时可以更轻松地管理。例如,以下是搭配使用映像和容器的方式:
- 通过基于同一映像运行多个容器实例,横向扩展应用程序。
- 通过在开发、测试和生产环境中使用不同的映像,实现持续集成和部署(CI/CD)管道的自动化。
- 标记和管理映像的不同版本。这可以帮助您根据需要回滚或部署特定版本。
差异摘要:Docker 映像与Docker 容器
Docker 映像 |
Docker 容器 |
|
它是什么? |
用于创建容器的可重复使用、可共享的文件。 |
运行时实例;独立的软件。 |
创建来源 |
软件代码、依赖关系、库和 Dockerfile。 |
映像。 |
构成 |
只读层。 |
只读层,顶部带有额外的读写层。 |
可变性 |
不可变。如果有更改,则必须构建新文件。 |
可变;您可以根据需要在运行时对其进行更改。 |
使用时机 |
将应用程序配置详细信息存储为模板。 |
运行应用程序。 |
AWS 如何帮助满足您的容器和映像要求?
Amazon Web Services(AWS)提供许多产品,为您带来存储和管理容器映像的安全场所。
我们提供可管理容器何时何地运行的编排以及为容器提供支持的灵活计算引擎。AWS 可以帮助您管理容器及其部署,因此您不必担心底层基础设施。有关更多信息,请转到 AWS 上的容器。
Amazon Elastic Container Registry(Amazon ECR)是完全托管的容器注册表,提供高性能托管。因此,您可以可靠地将应用程序映像和构件部署到任何地点。构建容器式应用程序的开发人员现在可以直接从 Amazon ECR Public 发现和下载 Docker 官方映像。
Amazon Elastic Container Service(Amazon ECS)是一种完全托管的容器编排服务。它可让您更轻松地部署、管理和扩展容器化应用程序。Amazon ECS 在任务定义中使用 Docker 映像来启动容器。
立即创建账户,开始使用 AWS 上的 Docker。