奋斗
努力

一台服务器可以装两个版本的docker?

云计算

在一台服务器上同时安装或运行两个不同版本的 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 官方仓库下载不同版本的二进制文件(dockerddocker CLI),并存放在不同路径,通过环境变量切换:

    # 下载旧版本二进制(如 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-nspawnlxc
    Linux 容器工具(如 systemd-nspawn)可创建轻量级隔离环境,分别安装不同版本。


注意事项

  1. 版本冲突风险

    • 同时运行多个 dockerd 服务会导致端口冲突(默认监听 /var/run/docker.sock)。
    • 解决方案:为每个版本配置不同的 daemon.json 和 socket 路径。
  2. 生产环境建议

    • 避免直接混用多版本,推荐通过容器或虚拟机隔离。
    • 使用编排工具(如 Kubernetes)管理不同版本的运行时。
  3. CLI 工具切换
    若需切换 docker CLI 版本,可通过别名或修改 PATH

    alias docker-old='/path/to/docker-19.03.9/docker'

总结

  • 测试/开发场景:优先使用 docker:dind 容器化方案。
  • 生产环境:通过虚拟机或隔离环境严格分隔版本。
  • 复杂需求建议考虑容器编排平台(如 Kubernetes 支持多容器运行时)。
未经允许不得转载:云服务器 » 一台服务器可以装两个版本的docker?