共计 2829 个字符,预计需要花费 8 分钟才能阅读完成。
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 version
Docker 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
将只会启动 backend 和 db 服务,要启动相应配置的服务,须要应用 --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 我的项目目录
可执行的命令:ps
,exec
,start
,stop
,restart
,down
能够先通过 docker compose ls
列出以后环境的 Compose 我的项目
❯ docker compose ls
NAME STATUS CONFIG FILES
dbweb running(1) docker-compose.yml
monitor running(1) /home/mengz/dockerapp/monitor/docker-compose.yml
traefik running(1) /home/mengz/dockerapp/traefik/docker-compose.yml
truenas running(1) /home/mengz/dockerapp/truenas/docker-compose.yml
而后通过 -p < 我的项目名 > 命令
来治理我的项目服务
❯ docker compose -p dbweb ps
NAME COMMAND SERVICE STATUS PORTS
dbweb_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】