M Mengz You / Mengz的专栏

开始使用 DOCKER COMPOSE V2

event 2023-01-17 visibility 536 comment 0 insights toc
more_vert
insights Stats
toc Table of contents

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

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 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 将只会启动 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 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

More from Kontext
comment Comments
No comments yet.

Please log in or register to comment.

account_circle Log in person_add Register

Log in with external accounts