升级 Linux 上的 Docker Compose 到 V2
前言⌗
某一次本地 Docker Desktop for macOS 更新后,导致了开发环境服务无法成功启动,查看错误原因是 extends
的配置项被弃用。
因为我们的项目依赖的环境比较多,但是在本地开发、测试环境和生产环境中所用到的服务是不完全一样的,所以我想通过 extends
来更好的管理服务编排的文件。
版本对比⌗
开发语言:v1 是采用 Python 开发的,而 v2 则是彻底采用 Go 来开发的。我记得之前在服务器上升级 Docker Compose 的时候因为 Python 依赖的问题,整的我还挺头疼。现在好了,一个二进制文件下载下来就行了;
组件化:Docker Compose 被作为 docker 命令的子命令以插件的方式即成到整个 Docker 生态中;
去版本化:在 Docker Compose v1 中,docker-compose.yml 的开头必须声明
version
,而在 v2 和 v3 中不在需要指定version
。可能是为了兼容 Swarm 吧。
应该使用那个版本?⌗
我个人更加倾向于 v2,因为它较 v1 有明显的优势,当然 docker 团队也给出了兼容的方案,就是使用 Compose-Switch,来转译到 v2。
安装 Docker Compose v2⌗
在 Windows 和 macOS 上,无需自己手动安装,在 Docker Desktop 中已经包含了,Linxu 单用户可以使用如下命令安装:
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
(x)
curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
(x)
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
(x)
docker compose version
(x)Docker Compose version v2.4.1
如果想全局安装,你可以将 docker-compose 放在下面四个目录中的任意一个:
- /usr/local/lib/docker/cli-plugins
- /usr/local/libexec/docker/cli-plugins
- /usr/lib/docker/cli-plugins
- /usr/libexec/docker/cli-plugins
Compose Switch⌗
使用脚本自动安装⌗
curl -fL https://raw.githubusercontent.com/docker/compose-switch/master/install_on_linux.sh | sh
手动安装⌗
下载可执行文件⌗
(x)# 下载可执行文件
curl -fL https://github.com/docker/compose-switch/releases/download/v1.0.4/docker-compose-linux-amd64 -o /usr/local/bin/compose-switch
(x)
(x)# 添加可执行权限
chmod +x /usr/local/bin/compose-switch
重命名 Docker Compose v1 的可执行文件⌗
mv /usr/local/bin/docker-compose /usr/local/bin/docker-compose-v1
制作可替换的 Alias:⌗
- RHEL 系列的系统使用
alternatives
命令 - Debian 系列系统使用
update-alternatives
命令
我这里用的是 CentOS 所以下面的命令都是 alternatives
来设置的。
alternatives --install /usr/local/bin/docker-compose docker-compose /usr/local/bin/docker-compose-v1 1
alternatives --install /usr/local/bin/docker-compose docker-compose /usr/local/bin/compose-switch 99
验证结果⌗
$ alternatives --display docker-compose
(x)
(x)docker-compose - status is auto.
(x)link currently points to /usr/local/bin/compose-switch
(x)/usr/local/bin/docker-compose-v1 - priority 1
(x)/usr/local/bin/compose-switch - priority 99
(x)Current `best' version is /usr/local/bin/compose-switch.
切换版本⌗
alternatives --config docker-compose
(x)
(x)There are 2 programs which provide 'docker-compose'.
(x)
(x) Selection Command
(x)-----------------------------------------------
(x) 1 /usr/local/bin/docker-compose-v1
(x)*+ 2 /usr/local/bin/compose-switch
(x)
(x)Enter to keep the current selection[+], or type selection number: 1
(x)# 验证是否切换成功
docker-compose version
(x)docker-compose version 1.29.2, build 5becea4c
(x)docker-py version: 5.0.0
(x)CPython version: 3.7.10
(x)OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
I hope this is helpful, Happy hacking…