Aiignitions
服务与软件

Docker 评论:容器、Docker 桌面和开发者平台

Docker 评论:使用镜像、Dockerfiles、Docker Desktop、Docker Hub、Compose 和 Scout 进行操作系统级容器化 — 其工作原理、定价、优缺点。

Docker 评论:容器、Docker 桌面和开发者平台

什么是 Docker?

Docker 是一个用于在内部构建、运输和运行应用程序的平台 容器。容器将您的代码及其运行所需的一切(运行时、系统库和配置)捆绑到一个独立的单元中。由于该单元具有自己的依赖项,因此无论是在开发人员的笔记本电脑、测试服务器还是云中的生产环境上运行,它的行为都是相同的。这是对古老抱怨“但它可以在我的机器上运行”的答案:使用 Docker,机器可以与应用程序一起移动。

Docker 的底层使用 操作系统级虚拟化。与在虚拟机管理程序之上启动完整来宾操作系统的虚拟机不同,容器共享主机的内核并仅隔离其所需的进程、文件系统和网络。这使得容器变得更轻、启动速度更快(几秒钟而不是几分钟),并且允许单个主机并行运行其中的许多容器。 Docker 于 2013 年首次发布,将容器化从一个不起眼的 Linux 功能变成了日常开发工具,如今它支撑着现代软件交付的巨大份额。它适合每个人,从打包副项目的独立开发人员到标准化数百个服务的构建和部署方式的平台团队。

Docker platform overview showing containers, images, Docker Desktop, Docker Hub, and Docker Scout

使用 Docker 的好处

  • 各处的一致性: 容器在您的笔记本电脑上、在 CI 中和在生产中运行相同,消除了导致“在我的机器上运行”错误的环境漂移。
  • 轻量且快速: 由于容器共享主机内核而不是启动完整的操作系统,因此它们可以在几秒钟内启动并使用虚拟机的一小部分内存和磁盘。
  • 无开销隔离: 每个容器都有自己的文件系统、进程和网络命名空间,因此应用程序及其依赖项在一台主机上保持整齐的分离。
  • 可重现的构建: 一个 Dockerfile 将图像描述为代码,因此任何人都可以从源代码重建完全相同的环境 - 无需手动配置服务器或未记录的步骤。
  • 跨云便携: 相同的映像可以在任何具有容器运行时的主机上运行,从 Raspberry Pi 到 AWS、Azure 或 Google Cloud,从而避免锁定到一个提供商的设置。
  • 庞大的生态系统: Docker Hub 为数据库、语言和工具提供现成的官方映像,因此您可以通过单个命令启动 Postgres、Redis 或 Node。

Docker 的主要特点

  • 图像和容器

    Docker 中的两个核心对象是镜像和容器。一个 图像 是一个只读模板 - 您的应用程序及其依赖项 - 构建在层中 Dockerfile,纯文本指令配方,例如从哪个基本映像开始、复制什么以及运行什么命令。一个 容器 是图像的运行实例。您可以自由启动、停止和销毁容器,从同一个映像启动多个容器,并且知道每个容器都是隔离的且可复制的。这种一次构建、随处运行的模型是其他一切的基础。

    Docker images and containers built from a Dockerfile
  • Docker 桌面

    Docker 桌面 是适用于 Mac、Windows 和 Linux 的一体化应用程序,大多数人在开始使用时都会安装它。它捆绑了 Docker引擎、命令行客户端、Docker Compose 以及用于浏览图像、容器和卷的图形仪表板。在 Mac 和 Windows 上,它在后台运行一个轻量级 Linux VM,因此容器的行为就像在 Linux 服务器上一样。它还处理更新、资源限制和扩展,为开发人员提供了一个友好的入口,而无需手动将各个部分连接在一起。

    Docker Desktop GUI application for Mac, Windows, and Linux
  • Docker 中心注册表

    码头工人中心 是 Docker 的云注册表——存储和共享图像的默认位置。它托管着一个庞大的官方和社区镜像库,因此您可以使用一个命令提取可信的、现成的 Postgres、Nginx 或 Python 镜像,而不是从头开始构建。您还可以推送自己的映像,将其保密,并将其拉入 CI 管道或生产主机中。 Hub 与底层注册表格式一起使图像能够轻松地跨团队和机器分发。

    Docker Hub cloud registry for storing and sharing container images
  • Docker 组合

    真正的应用程序很少是单个容器——Web 应用程序可能需要数据库、缓存和后台工作人员。 Docker 组合 让您可以在一个声明性 YAML 文件中定义整个多容器堆栈,描述每项服务、其映像、端口、卷以及服务的连接方式。单个 docker compose up 然后通过连接正确的网络来启动一切,然后一个命令就能将其全部摧毁。它将复杂的本地环境转变为可以立即版本化、共享和重现的环境。

    Docker Compose defining a multi-container application in one YAML file
  • Docker 构建、Buildx 和 Docker Scout

    现代 Docker 构建运行于 构建套件,后面的发动机 码头工人构建构建x 插件,它添加了快速缓存、并行阶段和多平台映像,因此一个构建可以同时针对 x86 和 ARM。 泊坞侦察兵 软件供应链可见性的分层:它分析您的映像内容,生成软件物料清单,并标记依赖项中的已知漏洞,并提供如何修复这些漏洞的指导。除了内置的 对于持久数据和 网络 对于容器到容器的通信,这些工具将 Docker 从本地实验带到生产级交付,并与 Kubernetes 和 CI 系统干净地集成以进行大规模编排。

Docker 的定价

Docker 本身——引擎、CLI、镜像和容器——是免费且开源的。付费订阅涵盖的是周边平台:适用于组织的 Docker Desktop、Docker Hub 上的私有存储库、更高的拉取速率限制、Docker Scout 和团队管理。计划按用户定价,按年计费比按月计费便宜。请注意 Docker Desktop 需要为大公司付费订阅 — 员工超过 250 名或年收入超过 1000 万美元的组织必须使用 Pro、Team 或 Business 计划。

  • 个人(免费): 0 美元 — 包括供个人使用、小型企业、教育和非商业开源的 Docker Desktop,以及无限的公共存储库以及本地构建和运行。个人开发人员需要学习和交付的一切。
  • 专业人士: 大约 9 美元/用户/月起(按年计费)——为需要比免费套餐更多功能的个人专业开发人员添加了私有存储库、更高的镜像拉取限制和 Docker Scout 基础知识。
  • 团队: 大约 15 美元/用户/月起(按年计费),是最受欢迎的选择 — Pro 版以及团队管理、基于角色的访问控制、更多并发构建以及协作组的审核日志记录中的所有内容。
  • 业务: 约 24 美元/用户/月起(按年计费)——SSO 和 SCIM 配置、集中管理、图像访问控制以及对具有安全性和合规性需求的大型组织的增强支持。
Docker pricing plans: Personal, Pro, Team, and Business

Docker Desktop 的价格、计划功能和公司规模门槛会随着时间的推移而变化 — 查看官方 Docker 定价页面 了解当前费率以及每个计划的具体内容。

真实世界用例分析

个人开发者

一致的本地环境: 开发人员可以使用单个 Compose 文件启动生产的精确副本(正确的数据库版本、正确的语言运行时),然后在完成后将其拆除。不再因为相互冲突的依赖关系而污染主机,并且启动新项目只需几分钟而不是一天的设置。

DevOps 和平台团队

标准化构建和部署: 团队将他们的应用程序烘焙到 CI 中的映像中,使用 Docker Scout 扫描它们,将它们推送到注册表,并将相同的工件部署到暂存和生产环境。由于镜像在不同环境中都是不可变且相同的,因此发布变得可预测,并且回滚就像运行以前的标签一样简单。

微服务和 Kubernetes

编排单位: 当一个应用程序被分成许多小服务时,每个服务都作为自己的容器进行交付。 Docker 构建并打包这些服务,而像 Kubernetes 这样的编排器则在集群中调度、扩展和修复它们——使用 Docker 镜像作为每个节点都能理解的通用货币。

Docker 的优点和缺点

优点

  • 容器保证了从笔记本电脑到生产的相同环境,结束了“在我的机器上运行”的故障。
  • 比虚拟机更轻且启动速度更快,因为它们共享主机内核。
  • Dockerfile 使环境可作为代码进行复制和版本控制。
  • Docker Hub 庞大的官方镜像库可让您通过一个命令运行常用服务。
  • Compose 将复杂的多服务堆栈转换为单个可共享的 YAML 文件。
  • 事实上的行业标准,深度集成到 CI/CD 和 Kubernetes。

缺点

  • 对于新手来说,围绕图像、图层、体积和网络有一个真正的学习曲线。
  • Docker Desktop 现在要求大公司付费订阅,这让一些团队措手不及。
  • 容器共享主机内核,因此对于敌对工作负载而言,隔离性比完整虚拟机弱。
  • 使用卷保存有状态数据需要小心,因为容器本身就是一次性的。
  • 仅靠 Docker 无法进行大规模编排——生产集群仍然需要 Kubernetes 或类似的系统。

关于 Docker 的最终想法

Docker 是真正改变软件构建和交付方式的罕见工具之一,十多年来它仍然是开发人员打包应用程序的默认方式。它的核心理念是一个轻量级、便携式的容器,在任何地方都运行相同的容器,它很容易掌握,但却解决了一个曾经让团队花费无数时间的问题。凭借 Docker Desktop 作为平易近人的入口、用于共享图像的 Docker Hub、用于多服务堆栈的 Compose 以及用于供应链安全的 Scout,该平台现在涵盖了从首次本地实验到生产交付的整个路径。权衡是学习曲线和大公司现在需要 Docker Desktop 的付费订阅,再加上生产扩展仍然需要协调器的现实。但对于任何构建现代应用程序的人来说,Docker 几乎是必不可少的——免费的个人层意味着大多数开发人员无需花费一分钱就可以学习它并证明其价值。