什么是 Docker
Docker 是一个用于开发、交付和操作应用程序的开放平台。它旨在使应用程序更快。使用 Docker,您可以将应用程序与基础架构分离,并将基础架构视为托管应用程序。它可以帮助您更快地测试代码并减少编写代码和运行代码之间的时间。Docker 通过一个轻量级的容器虚拟化平台来做到这一点,使用有助于管理和布局应用程序的流程和实用程序。
Docker 允许您在隔离容器中安全地运行几乎任何应用程序。隔离允许您同时在同一主机上运行多个容器,因为组件不会以任何不需要的方式相互交互。容器的轻量级特性可以在没有虚拟机管理程序的额外负载的情况下运行,允许您从硬件中获得更多收益。
Docker 允许您在从本地机器或数据中心到云基础设施的任何地方部署代码。
码头工人架构
Docker 是一个客户端-服务器应用程序。Docker 守护进程为您的应用程序提供服务(创建、部署、关闭等),并且docker 客户端与之交互以管理其活动。客户端和服务器可以存在于一个系统中,docker客户端也可以连接到远程守护进程。
您需要了解 3 个主要术语:
图片
登记处
容器
Image是一种只读模式,用于构建容器。图像可以包含 Apache Nginx 或 Kafka 与 Ubuntu 等。您可以添加、更新和共享您的图像。Image 是一个构造组件。
每个图像由层组成。Docker 使用 UnoinFS 将这些层组合成一个镜像。UnionFS 为其他文件系统实现了一个。它允许不同文件系统(称为分支)的文件和目录透明地覆盖,形成一个单一的连贯文件系统。在合并的分支中具有相同路径的目录的内容将在新的虚拟文件系统内的单个合并目录中一起看到。
这使得 docker 轻量级。任何时候,您进行任何更改,都会创建一个新层,而无需替换整个映像或重建它,就像您可能对虚拟机所做的那样,仅添加或更新级别。而且您不需要分发整个新图像。唯一的更新是分发的,这使得分发图像更容易和更快。
此外,这允许您减少应用程序所需的空间,因为多个容器实例使用相同的级别。那是因为所有层都是只读的,所以我们可以将这些层用于多个实例,但为每个容器创建一个新的读写层,它可以进行任何与其他容器隔离的更改。
每个图像的核心是一个基本图像。例如,ubuntu,Ubuntu 的基础镜像,或 Debian,Debian 发行版的基础镜像。您还可以使用图像作为创建新图像的基础。
注册表是图像的存储。它允许您保存自己的或使用任何公共的。有公共和私人登记处。官方的 Docker 注册表称为 Docker Hub。注册表是一个分发组件。
容器是应用层的抽象,将用户文件和依赖项打包在一起。它们可以被创建、启动、停止、移动或删除。多个容器可以在同一台机器上运行并与其他容器共享操作系统内核,每个容器都作为用户空间中的独立进程运行。与 VM 相比,容器占用的空间更少(容器映像的大小通常为数十 MB)。它们可以处理更多的应用程序并且需要更少的虚拟机和操作系统。它是执行的一个组成部分。
3818882335
使用 Docker 构建容器化应用程序的结构
主要的替代方法是使用虚拟机 (VM),它是物理硬件的抽象,将一台服务器变成多台服务器。管理程序允许多个虚拟机在单台机器上运行。每个 VM 都包含操作系统、应用程序、必要的二进制文件和库的完整副本——占用数十 GB。VM 的启动速度也可能很慢。
3818883019
使用虚拟机的容器化应用程序结构
它是如何工作的?
您有一个在 node.js 平台上编写的简单 REST 服务,并且您想要部署它。首先,您需要创建一个图像。您应该创建一个 Dockerfile,您将在其中指定一组有关如何构建新容器的命令。您可以选择基本映像作为节点或节点高山(较小)。然后,您将描述一组命令,这些命令会将代码复制并粘贴到正确的目录中,安装所有依赖项并运行服务器。在主机上,Docker 会检查它是否有一个节点镜像,如果有必要就下载它。
当 docker daemon 启动容器时,它会在映像之上创建一个读/写级别(使用联合文件系统,如前所述),可以在其中启动应用程序。
Docker 使用多个命名空间来隔离容器,例如 PID、NET 和 UTC 命名空间。前面列出的所有功能都使用 Linux 内核,因此如果您使用 Windows,则需要一个特殊的虚拟机。
一些常见的用例
简化配置
Docker 提供了在任何基础设施之上运行具有自己配置的任何平台的能力,而无需虚拟机的开销。使用 Dockerfile,您可以将配置放入代码中,并通过 env 变量传递不同环境并进行部署。所以,同一个 docker 镜像可以在不同的环境中使用。
开发人员生产力
使用 Docker,我们确信开发环境将尽可能接近生产环境。这将减少许多错误。此外,一旦编写了 Dockerfile,就可以多次使用它来构建和部署应用程序。这将减少环境准备的时间。
应用程序隔离
在某些情况下,您需要在同一台服务器中的应用程序之间进行隔离以降低成本,或者您需要计划将单体应用程序分离成解耦的部分。例如,您可能需要运行两个 REST API 服务器,这两个服务器都需要 node.js。但是,它们每个都使用略有不同的节点版本,并且具有其他类似的依赖项。您可以在多个容器中运行这些服务器来解决此问题。
服务器整合
Docker 的应用程序隔离能力允许整合多个服务器以节省成本,而无需多个操作系统的内存占用。它还能够跨实例共享未使用的内存。与 VM 相比,Docker 提供了更密集的服务器整合。
快速部署
可以在几毫秒内创建和启动 Docker 容器。发生这种情况是因为容器不会启动操作系统而只是运行应用程序进程。此外,Docker 映像的不可变特性让您高枕无忧,事情将完全按照它们一直在工作和应该工作的方式工作。
负载均衡
当我们有一个高负载应用程序时,我们需要将服务器负载共享给同一服务的多个实例。这是微服务架构中常用的方法。当然,我们需要一些服务来编排我们的 Docker 容器。但正是因为有了 Docker,我们才有能力快速创建我们服务的新实例。
谁使用 Docker?
贝宝
PayPal 将 700 多个应用程序迁移到 Docker Enterprise,运行超过 200,000 个容器。该公司还在构建、测试和部署应用程序方面实现了 50% 的生产力提升。
签证
在生产仅六个月后,Visa 的两个面向客户的支付处理应用程序的可扩展性提高了 10 倍。Visa 处理 5.8 万亿美元的交易,同时保持公司强大的可用性和安全能力。
康奈尔大学
康奈尔大学通过利用可重用架构模式和 Docker Enterprise 简化的构建和部署流程,将应用程序部署速度提高了 13 倍
相关帖子DA内容精选
|