Compose V2 我的项目启动于2021年6月,直到2022年4月26号,公布了GA版本。在公布GA版本后,社区也发表对于Compose V1将不会再进行性能更新,将在6个月后完结生命周期(EOL),期间会进行要害的平安和谬误修复。

V1与V2的兼容比照

确保 V1 和 V2 之间的兼容性对于日常工作流程至关重要,上面是V2中两个要害的更改

更改潜在影响迁徙
V2原生反对BuildKit,并且默认开启开发者在V2中将默认应用BuildKit进行镜像构建可通过设置环境变量不应用 DOCKER_BUILDKIT=0
容器名字中应用 - 代替了 _ 作为分隔符如果在脚本中应用了容器名字,这可能会导致谬误能够通过 "--compatibility" 标记来敞开此更改

对于更多的兼容性更改,请查看兼容性文档

如何装置Compose V2

Windows,MacOS和Linux上应用Docker Desktop,就自带了Compose V2,可通过命令 docker compose 执行。也能够通过配置“Use Docker Compose V2“来设置 docker-compose 别名到 docker compose

如果没有应用Docker Desktop for Linux,而是间接应用的Docker Engine,则须要额定装置 docker-compose-plugin 或者独立的二进制包。

例如对于Ubuntu,能够通过Docker官网的APT源间接装置

❯ sudo apt update❯ sudo apt install docker-compose-plugin

其余Linux, 例如在我的 openSUSE 上,通过手动从Github下载二进制文件进行装置(留神抉择版本和平台架构)

❯ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}❯ mkdir -p $DOCKER_CONFIG/cli-plugins❯ wget https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-linux-x86_64❯ mv docker-compose-linux-x86_64 $DOCKER_CONFIG/cli-plugins/docker-compose❯ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

执行一下命令测试

❯ docker compose versionDocker Compose version 2.6.0

更多装置形式,请查看官网文档。

Compose V2的劣势

在Docker CLI中疾速交付新性能

  • 反对GPU主机 - 如果Docker主机有GPU设施(显卡)并且Docker引擎进行了相干配置, 则Compose服务能够定义GPU设施的预留。
  • 反对配置服务启用(Profiles) - 通过选择性服务器启用来为多种用处和环境启动Compose利用模型,如下Compose文件
version: "3.9"services:  frontend:    image: frontend    profiles: ["frontend"]  phpmyadmin:    image: phpmyadmin    depends_on:      - db    profiles:      - debug  backend:    image: backend  db:    image: mysql

默认执行 docker compose up 将只会启动 backenddb 服务,要启动相应配置的服务,须要应用 --profile 标记或者设置环境变量 COMPOSE_PROFILES,例如

❯ docker compose --profile debug --profile frontend up❯ COMPOSE_PROFILES=frontend,debug docker compose up
  • 新增了 cp 命令 - 在服务容器和本地文件系统间接拷贝文件和目录
  • 新增了 ls 命令 - 列出以后环境中的Compose我的项目(利用栈)

开发到生产的无缝转换

通过星散成我的项目,能够容易的应用Compose V2将多容器利用部署到AWS ECS或者Azure ACI环境。

具体示例可参考 Deploying WordPress to the Cloud。

在Golang中创立一个同构的Docker生态系统

在Compose V2之前,V1是应用Python语言编写的,不在Docker的语言生态系统里。而V2应用Golang语言编写,能够提供来自Moby、CLI或任何基于Golang的我的项目代码,缩小了很多通过Python重写新性能或缺点的开发,容易从其余Docker工具(例如BuildKit)减少新性能到Compose中。

通过Golang,当初能够公布一个动态的二进制执行文件,相比Python,大大简化了更新和依赖治理。

在没有Compose文件的状况下执行命令

Compose V2能够在以下状况下通过 --project-name|-p 选项来治理运行的Compose我的项目容器服务

  • 当前目录不蕴含我的项目Compose文件(不在Compose我的项目文件目录下)
  • 不通过 --file 标记指定Compose文件
  • 不通过 --project-directory 标记指定Compose我的项目目录

可执行的命令: psexec,startstoprestartdown

能够先通过 docker compose ls 列出以后环境的Compose我的项目

❯ docker compose lsNAME                STATUS              CONFIG FILESdbweb               running(1)          docker-compose.ymlmonitor             running(1)          /home/mengz/dockerapp/monitor/docker-compose.ymltraefik             running(1)          /home/mengz/dockerapp/traefik/docker-compose.ymltruenas             running(1)          /home/mengz/dockerapp/truenas/docker-compose.yml

而后通过 -p <我的项目名> 命令 来治理我的项目服务

❯ docker compose -p dbweb psNAME                COMMAND             SERVICE             STATUS              PORTSdbweb_pgadmin       "/entrypoint.sh"    pgadmin             running             443/tcp❯ docker compose -p dbweb exec pgadmin sh/pgadmin4 $ exit

总结

这里简略介绍了Docker Compose V2的一些个性和性能,随着V1的逐步淘汰,咱们要拥抱V2,并且尝试其提供的新性能。
对于具体的Docker Docker,请参考官网文档。

参考:

  • Announcing Compose V2 General Availability
  • Install Docker Compose
同时公布在【Mengz's Blog】