速卖通素材
努力

ubuntu下可以配置多个docker?

服务器

在 Ubuntu 系统下,通常不建议也不支持同时运行多个 Docker 守护进程(daemon)实例,因为 Docker 默认使用系统级的资源(如 /var/run/docker.sock、网络命名空间、存储驱动等),多个 Docker 实例容易产生冲突。

但根据你的需求,有几种方式可以实现“多个 Docker”环境的效果:


✅ 方式一:使用 Docker in Docker (DinD)

适用于 CI/CD 或隔离构建环境。

  • 启动一个容器,在其中运行另一个 Docker 守护进程。
  • 示例:
    docker run --privileged -d docker:dind --storage-driver=overlay2
  • 注意:需要 --privileged 权限,安全性较低,仅用于特定场景。

✅ 方式二:使用 Rootless Docker

在同一台机器上以不同用户身份运行多个独立的 Docker 实例。

  • 普通用户也可以运行自己的 Docker 实例,不依赖系统全局的 dockerd
  • 多个用户可各自运行互不干扰的 Docker 环境。
  • 安装方法(以非 root 用户):
    # 安装 rootless Docker
    curl -fsSL https://get.docker.com/rootless | sh
  • 启动:
    $HOME/bin/dockerd-rootless.sh
  • 特点:
    • 更安全(无 root 权限)
    • 可多用户共存,每个用户一个实例
    • 适合开发测试或隔离环境

参考:https://docs.docker.com/engine/security/rootless/


✅ 方式三:修改配置运行多个 dockerd 实例(高级用法)

你可以手动启动多个 dockerd 进程,但必须确保它们使用不同的:

  • 监听 socket 或端口(如 tcp://127.0.0.1:2376
  • 数据目录(--data-root /var/lib/docker2
  • 配置文件和 cgroups/网络隔离

示例:

sudo dockerd 
  --data-root /var/lib/docker2 
  --host tcp://127.0.0.1:2376 
  --bip=172.26.0.1/16 
  --iptables=false 
  --containerd=/run/containerd/containerd.sock &

⚠️ 风险:

  • 容易造成资源冲突(镜像、网络、存储)
  • 管理复杂,一般只用于特殊测试场景

✅ 推荐替代方案:使用 PodmanLXC/LXD

如果你需要多个轻量级容器环境,可以考虑:

  • Podman:无需守护进程,支持多用户,兼容 Docker 命令
  • LXD:系统容器,可创建多个 Ubuntu 容器,每个里面运行独立 Docker

例如:

# 使用 LXD 创建两个 Ubuntu 容器
lxc launch ubuntu:22.04 docker-host1
lxc launch ubuntu:22.04 docker-host2

# 分别进入并安装 Docker
lxc exec docker-host1 -- bash
apt install docker.io

总结

方法 是否推荐 用途
Docker in Docker (DinD) ⚠️ 有条件 CI/CD 构建
Rootless Docker ✅ 推荐 多用户隔离开发
多个 dockerd 实例 ❌ 不推荐(除非特殊需求) 测试实验
LXD/Podman 替代 ✅ 强烈推荐 多环境隔离

最佳实践建议

如果你只是想隔离项目环境,使用 Docker Compose 就足够了。
如果需要完全隔离的 Docker 环境,推荐使用 Rootless DockerLXD 容器

如有具体使用场景(比如开发、测试、部署),欢迎补充,我可以给出更具体的配置方案。

未经允许不得转载:轻量云Cloud » ubuntu下可以配置多个docker?