写点什么

开始使用 DOCKER COMPOSE V2

作者:mengzyou
  • 2022 年 6 月 02 日
  • 本文字数:1993 字

    阅读完需:约 7 分钟

开始使用DOCKER COMPOSE V2

Compose V2 项目启动于 2021 年 6 月,直到 2022 年 4 月 26 号,发布了 GA 版本。在发布 GA 版本后,社区也宣布对于Compose V1将不会再进行功能更新,将在 6 个月后结束生命周期(EOL),期间会进行关键的安全和错误修复。

V1 与 V2 的兼容对比

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

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

如何安装 Compose V2

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


desktop-compose-v2


如果没有使用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 将只会启动 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 项目目录

可执行的命令: 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,请参考官方文档

参考:

同时发布在【Mengz's Blog

发布于: 刚刚阅读数: 3
用户头像

mengzyou

关注

还未添加个人签名 2015.07.29 加入

还未添加个人简介

评论

发布
暂无评论
开始使用DOCKER COMPOSE V2_Docker_mengzyou_InfoQ写作社区