在一台服务器上同时安装或运行两个不同版本的 Docker 是可行的,但需要谨慎操作以避免冲突。以下是几种实现方式及注意事项:
1. 使用多版本共存方案(不推荐生产环境)
-
通过包管理器安装不同版本
某些 Linux 发行版(如 Ubuntu/Debian)允许通过apt指定版本安装:# 查看可用版本 apt-cache madison docker-ce # 安装特定版本(如 20.10.0) sudo apt install docker-ce=5:20.10.0~3-0~ubuntu-focal docker-ce-cli=5:20.10.0~3-0~ubuntu-focal问题:直接安装多个版本会导致文件冲突,需通过容器或隔离环境实现。
-
手动下载二进制文件
从 Docker 官方仓库下载不同版本的二进制文件(dockerd、dockerCLI),并存放在不同路径,通过环境变量切换:# 下载旧版本二进制(如 19.03) wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz tar -xzvf docker-19.03.9.tgz # 运行时指定路径 /path/to/docker-19.03.9/dockerd --version缺点:需手动管理依赖和配置,易出错。
2. 使用容器化方案(推荐)
-
在容器中运行旧版 Docker (Docker-in-Docker)
通过主机的 Docker 运行一个容器,并在容器内安装旧版 Docker:# 启动一个容器并安装旧版 Docker docker run -it --privileged ubuntu:20.04 bash # 在容器内安装 Docker 19.03 curl -fsSL https://get.docker.com | VERSION=19.03 sh注意:需使用
--privileged权限,存在安全隐患,仅适合测试。 -
使用
docker:dind镜像
Docker 官方提供 DinD(Docker-in-Docker)镜像,可直接运行特定版本:# 运行 Docker 20.10 的 DinD 容器 docker run --privileged -d docker:20.10-dind # 进入容器并使用旧版 Docker docker exec -it <container_id> docker version
3. 使用虚拟机或隔离环境
-
通过虚拟机隔离
在服务器上创建多个虚拟机(如 VirtualBox、KVM),每个虚拟机安装不同版本的 Docker,完全隔离环境。 -
使用
systemd-nspawn或lxc
Linux 容器工具(如systemd-nspawn)可创建轻量级隔离环境,分别安装不同版本。
注意事项
-
版本冲突风险
- 同时运行多个
dockerd服务会导致端口冲突(默认监听/var/run/docker.sock)。 - 解决方案:为每个版本配置不同的
daemon.json和 socket 路径。
- 同时运行多个
-
生产环境建议
- 避免直接混用多版本,推荐通过容器或虚拟机隔离。
- 使用编排工具(如 Kubernetes)管理不同版本的运行时。
-
CLI 工具切换
若需切换dockerCLI 版本,可通过别名或修改PATH:alias docker-old='/path/to/docker-19.03.9/docker'
总结
- 测试/开发场景:优先使用
docker:dind容器化方案。 - 生产环境:通过虚拟机或隔离环境严格分隔版本。
- 复杂需求建议考虑容器编排平台(如 Kubernetes 支持多容器运行时)。
云服务器