为什么Docker不支持多租户?

sme*_*eeb 4 multi-tenant docker

在Docker上观看了这段YouTube视频,并在22:00发言人(Docker产品经理)说:

" 你可能在想'Docker不支持多租户'......你说得对! "

但从来没有解释为什么实际给出.所以我想知道:他的意思是什么?为什么Docker不支持多租户?!如果你谷歌"Docker多租户"你出乎意料地得不到任何东西!

BMi*_*tch 6

多租户工具最常见的一个关键特征是每个租户之间的隔离.他们不应该能够看到或管理彼此的容器和/或数据.

docker-ce引擎是一个开箱即用的系统管理员级别工具.任何可以使用任意选项启动容器的人都可以在主机上进行root访问.有一些第三方工具,如twistlock,它们与authz插件接口连接,但它们只提供粗略的访问控制,允许或禁止每个人从一整类活动,如启动容器或查看日志.为用户提供对TLS端口或docker套接字的访问权限会导致用户被集中到一个类别中,对于连接到docker引擎的用户,没有组或名称空间的概念.

对于多租户,docker需要添加一种定义用户的方法,并将它们放在只允许对特定容器和卷进行操作的命名空间中,并限制允许突破容器的选项,如更改功能或任意安装来自主机的文件系统.Docker的企业产品UCP确实开始通过在对象上使用标签来添加这些功能,但我没有时间来评估这是否会提供完整的多租户解决方案.


jdn*_*dno 5

这是一个棘手的问题,其他人可能比我更知道如何回答。但事情就这样了。

让我们看看多租户的定义(来源):

多租户是一种架构,其中软件应用程序的单个实例为多个客户提供服务。

确实很难将 Docker 归入这个定义。可以说它既是实例也是应用程序。这就是混乱的来源。

让我们将 Docker 分为三个不同的部分:守护进程容器应用程序

守护进程安装在主机上并运行 Docker容器。该守护进程实际上支持多租户,因为它可以在同一系统上供我的许多用户使用,每个用户在~/.docker.

Docker容器运行单个进程,我们将其称为应用程序

应用程序可以是任何东西。对于此示例,我们假设 Docker容器运行一个 Web 应用程序,例如论坛等。该论坛允许用户以自己的名义登录并发帖。它是为多个客户提供服务的单个实例。因此它支持多租户。

我们跳过的是容器以及它是否支持多租户的问题。我认为这就是你问题的答案所在。

重要的是要记住 Docker 容器不是虚拟机使用时docker run [IMAGE],您正在创建一个新的容器实例。这些实例是短暂且不可变的。它们运行单个进程,并在进程存在后立即退出。但它们的设计目的并不是让多个用户连接到它们并同时运行命令。这就是多租户。相反,Docker 容器只是进程的隔离执行环境。

从概念上讲,echo Hellodocker run echo Hello在此示例中是相同的。它们都在新的执行环境(进程与容器)中执行命令,都不支持多租户。

我希望这个答案具有可读性并能回答您的问题。如果有任何部分需要我澄清,请告诉我。