开始使用 DOCKER COMPOSE V2
Compose V2 项目启动于 2021 年 6 月,直到 2022 年 4 月 26 号,发布了 GA 版本。在发布 GA 版本后,社区也宣布对于 Compose V1 将不会再进行功能更新,将在 6 个月后结束生命周期(EOL),期间会进行关键的安全和错误修复。
V1 与 V2 的兼容对比
确保 V1 和 V2 之间的兼容性对于日常工作流程至关重要,下面是 V2 中两个关键的更改
更改 | 潜在影响 | 迁移 |
---|---|---|
V2 原生支持 BuildKit,并且默认开启 | 开发者在 V2 中将默认使用 BuildKit 进行镜像构建 | 可通过设置环境变量不使用 |
容器名字中使用 - 替代了 _ 作为分隔符 | 如果在脚本中使用了容器名字,这可能会导致错误 | 可以通过 "--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,请参考官方文档。
参考:
同时发布在【Mengz's Blog】