我看了this YouTube video on Docker,22:00,发言人(Docker产品经理)说:
“你可能在想'Docker不支持多租户'......你说得对!”
但从来没有解释为什么实际给出。所以我想知道:他的意思是什么? 为什么Docker不支持多租户?!如果您使用谷歌“Docker多租户”,您会惊讶地得不到任何东西!
答案 0 :(得分:6)
多租户工具最常见的一个关键特征是每个租户之间的隔离。他们不应该能够看到或管理彼此的容器和/或数据。
docker-ce引擎是开箱即用的系统管理员级别工具。任何可以使用任意选项启动容器的人都可以在主机上进行root访问。有一些第三方工具,如twistlock,它们与authz插件接口连接,但它们只提供粗略的访问控制,允许或禁止每个人从一整类活动,如启动容器或查看日志。允许用户访问TLS端口或docker套接字导致用户被归为一个类别,对于连接到docker引擎的用户,没有组或名称空间的概念。
对于多租户,docker需要添加一种定义用户的方法,并将它们放在只允许对特定容器和卷进行操作的命名空间中,并限制允许突破容器的选项,如更改功能或从主机安装任意文件系统。 Docker的企业产品UCP确实开始通过在对象上使用标签来添加这些功能,但我还没有时间来评估这是否会提供完整的多租户解决方案。
答案 1 :(得分:3)
其他人可能知道如何更好地回答我的问题。但是它就在这里。
我们采用多租户(source)的定义:
多租户是一种架构,其中单个软件应用程序实例为多个客户提供服务。
将Docker置于此定义中真的很难。可以说它既是实例又是应用程序。这就是混乱的来源。
让我们将Docker分成三个不同的部分:守护程序,容器和应用程序。
守护程序安装在主机上并运行Docker 容器。该守护进程实际上支持多租户,因为它可以在同一系统上用于我的许多用户,每个用户在~/.docker
中都有自己的配置。
Docker 容器运行一个进程,我们将其称为应用程序。
应用程序可以是任何东西。对于这个例子,让我们假设Docker 容器运行一个像论坛或其他东西的Web应用程序。该论坛允许用户以他们的名义登录和发布。它是单个实例,为多个客户提供服务。因此它支持多租户。
我们跳过的是容器以及它是否支持多租户的问题。这就是我认为你的问题的答案所在。
请务必记住,Docker容器不是虚拟机。使用docker run [IMAGE]
时,您正在创建新的容器实例。这些实例是短暂的和不可改变的。它们运行单个进程,并在进程存在时立即退出。但它们并非旨在让多个用户连接到它们并同时运行命令。这就是多租户。相反,Docker容器只是进程的隔离执行环境。
从概念上讲,echo Hello
和docker run echo Hello
在此示例中是相同的。它们都在新的执行环境(进程与容器)中执行命令,两者都不支持多租户。
我希望这个答案是可读的,并回答你的问题。如果有任何我应该澄清的部分,请告诉我。