Compose V2 入门

  • 自 2023 年 7 月起,Compose V1 将停止接收更新。它也不再在 Docker Desktop 的新版本中提供。
  • Compose V2 于 2020 年首次发布,包含在所有当前支持的 Docker Desktop 版本中。它提供了改进的 CLI 体验、改进的 BuildKit 构建性能以及持续的新功能开发。
  • 最简单且最推荐的方法是确保您拥有最新版本的 Docker Desktop,它捆绑了 Docker Engine 和 Docker CLI 平台(包括 Compose V2)。
  • 在 Docker Desktop 中,Compose V2 总是可以通过 docker compose 访问。此外,默认情况下开启了“使用 Compose V2”设置,这为 docker-compose 提供了一个别名。
  • 对于在 Linux 上手动安装,您可以通过以下方式获取 Compose V2:
  • docker-compose对比docker compose

    • 与 Compose V1 不同,Compose V2 集成到 Docker CLI 平台,推荐的命令行语法是 docker compose
    • Docker CLI 平台提供了一组一致且可预测的选项和标志,例如 DOCKER_HOST 环境变量或 --context 命令行标志。
    • 这一变化允许你在根 docker 命令上使用所有共享标志。例如,docker --log-level=debug --tls compose up 可以启用来自 Docker 引擎的调试日志记录,并确保连接使用 TLS。
    • 通过用空格替换连字符(-),将 docker-compose 改为 docker compose 来更新脚本以使用 Compose V2。
  • 服务容器名称

    • Compose 根据项目名称、服务名称和实例 / 副本数量生成容器名称。
    • 在 Compose V1 中,使用下划线 (_) 作为单词分隔符。而在 Compose V2 中,使用连字符 (-) 作为单词分隔符。
    • 下划线在 DNS 主机名中不是有效字符。通过使用连字符,Compose V2 确保服务容器可以通过一致且可预测的主机名在网络上进行访问。
    • 例如,运行 Compose 命令 -p myproject up --scale=1 svc 时,在 Compose V1 中生成的容器名为 myproject_svc_1,而在 Compose V2 中生成的容器名为 myproject-svc-1
    • 在 Compose V2 中,可以使用全局 --compatibility 标志或 COMPOSE_COMPATIBILITY 环境变量来保留使用下划线 (_) 作为单词分隔符的 Compose V1 行为。因为这个选项必须在每次运行 Compose V2 命令时指定,所以建议仅在过渡到 Compose V2 期间暂时使用这个选项。
  • 命令行标志和子命令

    • Compose V2 支持几乎所有 Compose V1 标志和子命令,因此在大多数情况下,它可以用作脚本中的直接替代品。

    • 在 V2 中不支持的内容

      以下内容在 Compose V1 中已弃用,并且在 Compose V2 中不受支持:

      • docker-compose scale。请改用 docker compose up --scale
      • docker-compose rm --all
    • 在 V2 中不同的内容

      在 Compose V1 和 V2 之间,以下行为有所不同:

      Compose V1 Compose V2
      --compatibility 已弃用。迁移基于旧版架构的 YAML 字段。 使用 _ 作为容器名称的单词分隔符,而不是 -,以匹配 V1。
      ps --filter KEY-VALUE 未文档化。允许根据任意服务属性进行过滤。 仅允许根据特定属性进行过滤,例如 --filter=status=running
  • 环境变量

    • 在 Compose V1 中,环境变量的行为没有正式记录,并且在某些特殊情况下表现不一致。
    • 对于 Compose V2,环境变量部分涵盖了优先级以及 .env 文件插值,并包含许多示例,涉及到复杂情况,如转义嵌套引号。
    • 检查以下内容:
      • 你的项目是否使用了多层环境变量覆盖,例如 .env 文件和 --env 命令行标志。
      • 任何 .env 文件中的值是否包含转义序列或嵌套引号。
      • 任何 .env 文件中的值是否包含字面意义的 $ 符号。这在 PHP 项目中很常见。
      • 任何变量值是否使用了高级扩展语法,例如 ${VAR:?error}
    • 在项目上运行 docker compose config,以在 Compose V2 执行插值后预览配置,并验证值是否符合预期。
    • 通常,通过确保字面值(不需要插值)使用单引号,而需要进行插值的值使用双引号,可以实现与 Compose V1 的向后兼容性。
  • 对于大多数项目,切换到 Compose V2 不需要对 Compose YAML 或开发工作流程进行更改。
  • 建议你适应使用 Compose V2 的新方式,即使用 docker compose 而不是 docker-compose。这提供了更多的灵活性,并且不再需要使用 docker-compose 的兼容性别名。
  • 然而,Docker Desktop 仍然支持 docker-compose 别名,将命令重定向到 docker compose,以方便使用并提高与第三方工具和脚本的兼容性。
本文结束 感谢您的阅读
正在加载今日诗词....