Part2 Docker全家桶:一文读懂容器生态圈

73 阅读9分钟

Docker是一项非常实用的工具, 在这篇文章中,我们将逐步整理和解释一些常见的Docker名词,如Docker Engine和Docker Desktop,来打好docker基础。

本文涉及的技术名词: Docker EngineDocker DesktopDocker CLIDocker ComposeDocker HubECS/GKE

本文我们将重点探讨Docker Engine,并深入讲解在使用Docker时经常会听到的几个核心概念:容器、镜像和Dockerfile。通过这些内容的学习,将能够更好地理解和应用Docker技术。

Docker

Docker 是由 Docker Inc。 开发的一个平台,使用基于容器的虚拟化技术来开发和部署应用程序。

最初在2013年发布时,“Docker”指的是一个单一的应用程序,但随着标准化和不断发展,Docker 逐渐包含了多个组件,如今“Docker”已被视为一个完整的平台。

本文将简要概述 Docker 平台中包含的各个元素:

  • Docker Engine
  • Docker CLI
  • Docker Desktop
  • Docker Compose
  • Docker Hub

此外,还有一些内容本文不会详细讨论,我们将在这里简要提及,并标注为暂时不学习的内容:

  • ECS / GKE
  • ECR / GCR
  • Kubernetes

Docker Engine

Docker Engine 是基于容器的虚拟化软件。它允许我们将应用程序视作容器来处理和管理。

Docker 容器依赖于 Linux 内核及其功能运行,因此 Docker Engine 只能在 Linux 系统上运行。

Docker Engine 还提供了一个命令行界面(CLI),这是 Docker 的核心部分。通过 CLI,用户可以直接与 Docker Engine 交互,执行管理容器、创建镜像、启动和停止服务等操作。CLI 是开发者和运维人员使用 Docker 的主要工具,使得 Docker 的强大功能得以充分发挥。

Docker CLI

命令行界面(CLI)是为 Docker Engine 提供的接口,它允许我们使用以 docker 开头的命令(例如 docker rundocker build 等)来与 Docker 交互。

简单点说, CLI 就是用来执行这些命令的部分,这是我们使用 Docker 时最常见、最直观的操作方式,也是最容易使用的工具。通过这些命令,可以轻松管理和控制容器、镜像等 Docker 资源。

这里提一下,docker 命令会通过 dockerd 将指令传递给名为 containerd 的守护进程,并操作运行时环境。不过,dockerdcontainerd 通常是隐藏的,不需要特别关注它们的存在。这些底层进程在后台工作,确保容器的顺利运行,而我们只需专注于使用 docker 命令即可完成大部分操作。

Docker Desktop

Docker Desktop 是一款用于在 Windows 和 Mac 上使用 Docker 的图形用户界面(GUI)应用程序。

通过这个 GUI,可以查看和停止容器,而不必使用 Docker CLI 命令行工具。Docker Desktop 包含了 Docker Engine 和 Linux 内核,因此我们可以在非 Linux 操作系统(如 Windows 或 Mac)上运行 Docker Engine。

通常来说,“在主机(Windows 或 Mac)上安装 Docker”指的就是“安装 Docker Desktop 应用程序”。

上图中我们看到Docker Desktop 还包括 Docker Compose、Kubernetes 等组件。

这意味着,除了 Docker Engine 和 Linux 内核之外,还可以使用 Docker Desktop 轻松管理多容器应用(通过 Docker Compose)以及容器编排(通过 Kubernetes)。这些功能使得 Docker Desktop 成为一个功能强大的工具,适合在 Windows 和 Mac 上进行复杂的开发和部署任务。

安装与账户

在使用 Docker 之前,我们需要先进行安装和设置账户。以下是一些关键步骤:

  1. 安装 Docker Desktop
    • 可以从 Docker Hub 下载 Docker Desktop。这里需要注意得是要根据自己的操作系统,选择适合的版本(Windows 或 Mac)。安装过程相对简单,按照提示安装即可。
  1. 账户设置
    • 安装完成后,可以选择使用 Docker ID 登录 Docker Desktop。虽然不登录也能使用 Docker,但登录后可以享受更多的功能和优势,比如更高的下载速率限制。
    • 如果还没有 Docker ID,可以在 Docker 官网 创建一个账户。

Docker Compose

Docker Compose 可以批量运行 Docker CLI 命令,提供以 docker compose 开头的命令,例如 docker compose up

这个工具允许我们通过编写 Yaml 文件,将诸如“启动两个容器”、“为每个容器构建网络”和“将容器数据与主机共享”等复杂操作一并执行。通过 Yaml 文件,我们可以轻松定义和管理多个容器的配置,而无需手动输入一系列命令。

简单点说,Docker Compose 可以一次性执行一组 Docker 命令,大大简化了复杂容器环境的管理。

引入 Docker Compose 后,复用相同逻辑的配置将会变得非常容易

在本系列文章后续,我们会深入探讨如何将 Docker CLI 构建的环境替换为 Docker Compose,并感受到这其中的便捷之处。展示它是如何大大简化了复杂环境的管理和部署过程。

Docker Hub

Docker Hub 是一个由 Docker 官方提供的云端镜像存储与管理平台。它允许开发者和组织上传、存储、分享和分发容器镜像。

这里我们简单理解为它是一个存储公共可用镜像和构建镜像的地方。就像开发时使用 git pullgit push 操作代码一样,Docker Hub 也可以让我们拉取和推送镜像(它就像是镜像的 GitHub)。

小提示: 从 Docker Hub 拉取镜像不需要账户或登录,可以直接获取所需的镜像,方便快捷地开始使用。

ECS/GKE/ACK/TKE/CCE

Amazon Elastic Container Service (ECS) 和 Google Kubernetes Engine (GKE) 是容器管理服务。

简单来说,它们是安装了 Docker Engine 的 Linux 环境,我们可以在这些平台上部署在本地开发时使用的容器。这样,容器化应用程序可以轻松地从本地开发环境迁移到云端的生产环境。

在国内,本土云服务提供商也提供了类似 ECS和GKE的容器管理服务。这些服务通常支持容器的部署、管理、扩展和编排。以下是几个主要的服务提供商及其对应的产品(排名不分先后):

  1. 阿里云容器服务 Kubernetes 版(ACK)
  • 阿里云的容器服务 ACK 提供了一个高性能的容器管理平台,完全兼容 Kubernetes。ACK 支持多种集群类型,集成了阿里云的监控、日志、负载均衡等云服务,并提供了自动弹性伸缩、CI/CD 集成、安全管理等功能。
  1. 腾讯云容器服务 Kubernetes 版(TKE)
  • 腾讯云的 TKE 是一个基于 Kubernetes 的容器管理平台,支持快速部署和管理容器应用。TKE 集成了腾讯云的负载均衡、存储、监控等服务,提供了灵活的资源调度和弹性伸缩能力。
  1. 华为云容器引擎(CCE)
  • 华为云 CCE 是一个企业级容器引擎,支持 Kubernetes 和裸金属容器服务。CCE 提供了一键部署、监控告警、弹性扩展等功能,适合企业级应用的容器化管理需求。

ECR/GCR/ACR/TCR/SWR

Amazon Elastic Container Registry (ECR) 和 Google Container Registry (GCR) 是私有镜像注册中心。

它们相当于私有的 Docker Hub,适用于不希望将商业服务的镜像公开发布在 Docker Hub 上的场景,但又需要将镜像注册到某个注册中心才能进行部署的情况。

同样我们也有本土的服务提供商的服务(排名不分先后):

  1. 阿里云容器镜像服务(ACR)
  • 阿里云的 ACR 是一个高可用、企业级的容器镜像仓库服务,支持多种镜像格式的存储和管理。ACR 集成了阿里云的安全扫描功能,可以帮助检测镜像中的安全漏洞。ACR 支持与阿里云的 Kubernetes 服务(ACK)无缝集成,并提供全球加速访问,适合大规模分布式部署。
  1. 腾讯云容器镜像服务(TCR)
  • 腾讯云的 TCR 提供安全、高效的容器镜像仓库服务,支持镜像的存储、管理和分发。TCR 集成了多区域加速分发功能,确保镜像在全球范围内的快速拉取和部署。TCR 还支持与腾讯云的 TKE 和 CI/CD 工具的集成,提供了一站式的开发运维体验。
  1. 华为云容器镜像服务(SWR)
  • 华为云的 SWR 是一个企业级的容器镜像服务,支持安全、可靠的镜像存储和分发。SWR 提供镜像安全扫描、版本管理、多区域分发等功能,适合企业的容器化应用场景。SWR 与华为云的 CCE 容器服务无缝集成,支持高效的镜像管理和应用部署。

Kubernetes

Kubernetes(简称 k8s)是一款用于管理多容器的编排软件,它提供了以 kubectl 开头的命令,例如 kubectl apply,用于管理和部署容器。

通过编排,Kubernetes 是一个用于运行和管理容器的工具, 使得创建负载均衡器和在访问量集中时进行扩展变得非常简单, 比较适用于需要处理大规模容器部署和管理的场景。

小提示: Kubernetes 已包含在 Docker Desktop 中

Docker Desktop商用付费

自 2021 年 8 月 31 日起,Docker Desktop 对于大多数商业用途已经开始收费。Docker 将其定价策略更改为根据用户的规模和使用情况进行收费。以下是具体的情况:

  1. 免费用户
    • 个人用户、小型企业(少于 250 名员工且年收入低于 1000 万美元)可以继续免费使用 Docker Desktop。
  1. 付费用户
    • 对于符合条件的企业用户(超过 250 名员工或年收入超过 1000 万美元),需要购买 Docker Desktop 的订阅。Docker 提供了多个订阅计划,包括 Pro、Team 和 Business 计划,每个计划的费用不同,提供的功能也有所区别。

因此,如果是个人开发者或小型企业用户,Docker Desktop 仍然可以免费使用。如果是大中型企业,则需要为 Docker Desktop 购买订阅。

总结

本篇文章涉及的新名词较多,所以在结尾我来简要总结一下:

  • Docker Engine:运行容器的软件。
  • Docker CLI:用于操作容器的命令行工具。
  • Docker Desktop:包含 Linux 内核和 Docker 套件的 GUI 应用程序。
  • Docker Compose:聚合并执行命令的工具。
  • Docker Hub:镜像注册中心的 SaaS 服务。
  • ECS/GKE/ACK/TKE/CCE:包含 Docker Engine 的容器管理服务。
  • ECR/GCR/ACR/TCR/SWR:私有镜像注册中心。
  • Kubernetes:监控运行容器的软件。