ubuntu可以安装多个docker吗?

可以,Ubuntu 完全支持安装多个 Docker 实例或不同版本的 Docker。

但需要明确的是:你通常不是“安装多个独立的 Docker 软件包”,而是通过以下几种方式实现“多实例”或“多版本共存”的需求。以下是常见场景和解决方案:


✅ 场景一:运行多个独立的 Docker Daemon(Docker 守护进程)

这是最常见的“多个 Docker”需求,即同时运行两个或多个互不干扰的 Docker 环境。

方法:使用 dockerd 自定义配置启动多个实例

每个实例使用不同的:

  • PID 文件(--pidfile)
  • Socket 文件(--host 或 --exec-root)
  • 数据目录(--data-root 或旧版 --graph)
  • 端口(--port)
示例步骤:
  1. 创建第二个 Docker 实例的配置目录:

    sudo mkdir -p /etc/docker2
    sudo mkdir -p /var/lib/docker2
    sudo mkdir -p /run/docker2
  2. 编写配置文件 /etc/docker2/daemon.json(可选):

    {
     "storage-driver": "overlay2",
     "log-driver": "json-file"
    }
  3. 手动启动第二个 Docker daemon:

    sudo dockerd 
     --config-file=/etc/docker2/daemon.json 
     --data-root=/var/lib/docker2 
     --exec-root=/run/docker2 
     --pidfile=/run/docker2/docker.pid 
     --host=unix:///var/run/docker2.sock &
  4. 使用新 socket 操作容器:

    export DOCKER_HOST=unix:///var/run/docker2.sock
    docker ps

⚠️ 注意:你需要为每个实例单独管理镜像、容器、网络等。可使用别名简化命令:

alias docker2='docker --host unix:///var/run/docker2.sock'

✅ 场景二:安装多个不同版本的 Docker Engine

例如:同时保留 Docker CE 20.x 和 24.x 用于测试兼容性。

方法:使用 APT 指定版本安装

Ubuntu 的 Docker APT 仓库允许你安装特定版本:

# 列出可用版本
apt-cache policy docker-ce

# 安装特定版本
sudo apt install docker-ce=5:24.0.7-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.7-1~ubuntu.22.04~jammy containerd.io=1.7.11-1~ubuntu.22.04~jammy

你可以同时安装多个版本,但默认只有一个 Docker daemon 在运行。要切换版本,需停止当前服务并启动另一个:

sudo systemctl stop docker
sudo systemctl disable docker

# 手动启动特定版本
/usr/bin/dockerd

💡 更推荐的方式是使用 Docker Desktop for Linux 或 Podman 作为替代方案,它们天然支持多引擎隔离。


✅ 场景三:使用 Podman 替代 Docker(推荐用于多环境隔离)

Podman 是 Docker 的替代品,无守护进程、支持 rootless、可并行运行多个引擎实例。

sudo apt install podman
podman run hello-world

Podman 可与 Docker 共存,且无需修改系统服务。


✅ 场景四:使用容器嵌套(Docker in Docker, DinD)

在单个 Docker 容器中运行另一个 Docker 实例:

docker run --privileged -d --name dind docker:dind

适用于 CI/CD 流水线中需要隔离构建环境的情况。


📌 总结建议

需求 推荐方案
同时运行两个独立 Docker 环境 手动启动多个 dockerd 实例 + 不同 socket/data-dir
测试不同 Docker 版本兼容性 APT 安装多版本 + 手动切换 daemon
安全隔离、无需 root 使用 Podman
CI/CD 中嵌套 Docker DinD(Docker-in-Docker)
桌面用户多环境管理 Docker Desktop for Linux

⚠️ 注意事项

  • 多个 Docker daemon 会占用更多内存和磁盘空间。
  • 确保每个实例使用不同的 data-root,避免数据冲突。
  • 防火墙和端口可能冲突,需仔细规划。
  • 生产环境中不建议随意运行多个 daemon,除非有明确隔离需求。

如有具体使用场景,我可以提供更详细的配置示例。