是的,在 Ubuntu 中可以部署并运行多个 Docker 实例,但需要明确“多个 Docker”的具体含义。通常有以下几种理解方式:
✅ 情况一:运行多个 Docker 容器(最常见)
这是最常见的使用场景:在一台 Ubuntu 机器上安装一个 Docker 引擎(Docker Engine),然后通过它运行多个容器。
# 示例:运行多个容器
docker run -d --name web1 nginx
docker run -d --name web2 nginx
docker run -d --name db mysql
✅ 这是完全支持且非常常见的做法。Docker 的设计初衷就是在一个宿主机上管理多个容器。
✅ 情况二:运行多个独立的 Docker Daemon(多个 Docker 服务实例)
这表示你想在同一台 Ubuntu 主机上运行多个 Docker 守护进程(daemon),每个使用不同的配置、端口、数据目录等。
⚠️ 默认情况下,一台机器只运行一个 Docker daemon(监听 unix:///var/run/docker.sock
),但你可以通过以下方式启动第二个甚至更多的 Docker 实例:
方法:自定义 Docker Daemon 配置
-
创建新的配置目录和 socket
sudo mkdir /etc/docker2 sudo mkdir /var/lib/docker2
-
编写新的 systemd 服务文件(如 docker2.service)
sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker2.service
-
编辑
docker2.service
,修改关键参数:[Service] ExecStart= ExecStart=/usr/bin/dockerd --host=unix:///var/run/docker2.sock --data-root=/var/lib/docker2 --pidfile=/var/run/docker2.pid --pidfile=/run/docker2.pid --config-file=/etc/docker2/daemon.json ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=0 StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes KillMode=process
-
重载 systemd 并启动新服务
sudo systemctl daemon-reload sudo systemctl start docker2 sudo systemctl enable docker2
-
使用时指定 DOCKER_HOST
export DOCKER_HOST=unix:///var/run/docker2.sock docker ps # 现在操作的是第二个 Docker 实例
✅ 这样你就有了两个独立的 Docker 实例,彼此隔离。
⚠️ 注意:这种方式复杂,一般用于测试、开发隔离或安全沙箱场景,生产中不常见。
❌ 情况三:安装多个 Docker 软件包?
你不能同时安装多个不同版本的 Docker 包(如 docker-ce
和 docker.io
)而不出冲突。你应该选择其中一个安装。
推荐使用官方 Docker CE 版本:
# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
# 安装 Docker CE(官方推荐)
curl -fsSL https://get.docker.com | sh
总结
目标 | 是否支持 | 说明 |
---|---|---|
运行多个容器 | ✅ 是 | 标准用法,强烈支持 |
多个 Docker daemon 实例 | ✅ 可以 | 需手动配置,适用于高级场景 |
同时安装多个 Docker 包 | ❌ 不推荐 | 会导致冲突 |
建议
- 对于绝大多数用户:安装一个 Docker,运行多个容器即可。
- 若需隔离环境,可考虑使用:
- Docker Compose(管理多容器应用)
- Podman(无守护进程,支持多用户)
- 虚拟机或命名空间隔离
如有具体需求(如多租户、安全隔离),欢迎进一步说明,我可以给出更详细的方案。