Docker介绍和重大版本变更历史

Docker是什么?

Docker 的定义

Docker 是一个完整的容器化平台,它包含多个工具和技术,用于开发、部署和运行容器化应用程序。Docker 提供了从开发到生产的一体化工作流,帮助开发者和运维团队构建和管理容器。

Docker 包括:

  • Docker Engine:用于构建和运行容器的核心引擎。
  • Docker CLI:与 Docker Daemon 交互的命令行工具。
  • Docker Compose:用于定义和管理多容器应用的工具。
  • Docker Hub:公共镜像仓库,用于存储和分发容器镜像。
  • Docker Desktop:开发者友好的 GUI 工具,包含 Docker Engine 和其他工具。
  • Docker Swarm
    • Docker 的内置容器编排工具,用于管理和部署分布式集群。
    • 提供高可用性、负载均衡和容器调度功能。
    • 使用简单,直接通过 Docker CLI 管理 Swarm 集群。

等等。

Docker Engine 的定义

Docker Engine 是 Docker 平台的核心组件,专注于容器的运行时管理。它具体包括以下部分:

  1. **Docker Daemon (dockerd)**:核心服务,负责实际的容器操作。
  2. **Docker CLI (docker)**:命令行工具,用于与 Daemon 交互。
  3. REST API:允许通过编程方式与 Daemon 交互。
  4. Container Runtime:底层运行时,用于执行和隔离容器(如 containerd)。

Docker 与 Docker Engine 的关系

  1. Docker 是整个平台,Docker Engine 是其中的核心技术
    • Docker Engine 提供容器的创建、管理、运行、网络、存储等核心功能。
    • Docker 作为平台,整合了多个工具和生态系统(如 Docker ComposeDocker SwarmDocker Hub)。
  2. Docker CLI 是 Docker Engine 的一部分
    • Docker CLI 是一个直接与 Docker Engine 交互的工具,是开发者使用 Docker 最常接触的部分。
  3. 品牌与技术的区别
    • Docker 是一个品牌,覆盖了从开发到生产的容器化工作流。
    • Docker Engine 是技术栈中的运行时,用于实际操作容器。

简单理解:Docker 是大框架,Docker Engine 是框架的核心技术,离开了 Docker Engine,Docker 就无法工作。

特性 Docker 平台 Docker Engine
定义 一个容器化平台,提供全栈工具。 核心组件,负责运行容器的引擎。
包含内容 Docker Engine、Compose、Hub 等。 Docker Daemon、CLI、REST API 等。
作用 开发到生产的一体化工作流。 容器创建、管理、运行的底层运行时支持。
用户接触 通过 CLI、Desktop 等工具接触。 通常通过 CLI 或 API 间接操作。

Docker 版本发布历史:较大的几次版本变更

Docker自问世以来,经历了多次重大版本变更,这些变更是为了提升性能、安全性、稳定性和用户体验。以下是一些较为重要的版本变更:

  • Docker Engine 1.x 系列(2013-2017)

    • Docker 项目刚刚起步,主要用于容器化和镜像管理。
    • docker-compose 作为一个独立工具(由 Python 编写)于 2014 年发布。
  • Docker 1.13.1(2017 年 2 月)

    • 引入 docker stack 命令,支持基于 Compose 文件的服务编排(Swarm 模式)。
    • 支持 Compose v3 文件格式,优化多容器服务定义与 Swarm 集成。
  • Docker Engine 17.x(2017)(CommunityEnterprise 分离)

    • Docker Engine 被分为 Docker CE(社区版)和 Docker EE(企业版)。
    • 仍然使用独立的 docker-compose,其功能逐步完善,支持更多的 Docker 功能,如网络和卷。
    • Compose v1 成为大规模生产环境的实际标准。
  • Docker Engine 20.10(2020 年 12 月,支持 Compose v2 的起点)

    • 引入了对 Compose v2 的支持(docker-composev1继续保留,但逐渐转向 v2。),这是一个基于 Go 的重写版本,作为 Docker CLI 的插件运行。
    • v2 的主要改进包括性能优化、原生支持 Kubernetes,以及改用 docker compose 命令(无破折号)。
    • 用户开始过渡到使用 docker compose
  • Docker Desktop 4.4 / Docker Engine 20.10.13(2021 年底)

    • 在 Docker Desktop 中,Compose v2 成为默认工具。
    • 官方明确推荐使用 docker compose 命令。
    • 在 Docker Desktop 和 Linux 系统中,docker-compose-plugin 替代了 docker-compose
      • 可以通过 docker compose version 验证是否使用了 v2。
  • Docker Engine 24.0(2023 年 5 月)

    • 完全移除了对 docker-compose(v1)的支持。
    • Compose v2 成为唯一选项,并直接作为 Docker 的插件运行。
    • 不再包含独立的 docker-compose,用户需要切换到 docker compose。(如果手动方式安装独立版本的话,基本还是可用的,不太建议)

为了展示的更加直观一些,整理为表格如下:

时间 Docker 版本 重要变更 对 Compose 的支持
2014 年 10 月 Docker Compose 发布 Docker Compose (v1) 发布,作为独立工具,用于定义和管理多容器应用(以 Python 编写)。 初始支持,需单独安装 docker-compose 工具。
2017 年 2 月 Docker 1.13.1 引入 docker stack 命令,支持基于 Compose 文件的服务编排(Swarm 模式)。 支持 Compose v3 文件格式,优化多容器服务定义与 Swarm 集成。
2017 年 3 月 Docker 17.03 Docker 开始分为 CE 和 EE 版本,采用新的版本命名规则。 继续支持独立的 docker-compose,推荐使用 v3 文件格式进行编排。
2020 年 12 月 Docker 20.10 引入 Compose v2(基于 Go 重写),作为 Docker CLI 插件运行,支持 docker compose 命令。 初步支持 Compose v2,但 docker-compose 工具仍保留。
2021 年底 Docker 20.10.13 在 Docker Desktop 中,Compose v2 成为默认工具,推荐使用 docker compose v2 稳定版发布,独立的 docker-compose(v1)逐渐被弃用。
2023 年 5 月 Docker 24.0 完全移除对 Compose v1 的支持,Compose v2 成为唯一选项。 不再支持 docker-compose 命令,用户必须使用 docker compose

docker compose文件版本的变更整理为表格如下:

文件格式版本 引入版本 关键特性 支持工具版本
v1 初始版本 基础服务、网络、卷支持 Compose v1
v2 Docker 1.10+ 网络隔离、命名卷等新特性 Compose v1
v3 Docker 1.13+ Swarm 支持、服务扩展、更新策略 Compose v1/v2
v3.9 Docker 20.10+ 最新功能优化,兼容性更新 Compose v2

结语

Docker 在多次版本变更中逐步增强对 Compose 的支持,从最初的独立工具到深度集成,最终形成现代化的 docker compose 命令,支持多容器编排的强大生态系统。

我们日常在使用docker或者其他工具的时候,尽量做到了解到其重要的版本变更(所有的版本的话那就太多了,也没有记的必要),更好地根据自己的实际需求选择合适的版本。