为什么Docker不支持多租户?
我在Docker上观看了这个YouTubevideo。在22:00,演讲者(Docker产品经理)说:
“ 你可能认为”Docker不支持多租户“,而且你是对的!
但从来没有任何解释为什么实际给予。 所以我想知道他是什么意思? 为什么Docker不支持多租户? 如果你Google“Docker多租户”,你竟然一无所获!
多租户工具最主要的特点之一是每个租户之间的隔离。 他们不应该能够看到或pipe理彼此的容器和/或数据。
docker-ce引擎是一个开箱即用的系统pipe理员级别的工具。 任何可以使用任意选项启动容器的人都可以在主机上进行root访问。 有一些像twistlock这样的第三方工具可以与authz插件接口连接,但是它们只提供粗略的访问控制,每个人都可以被允许或者不允许从整个类的活动,比如启动容器或者查看日志。 授予用户对TLS端口或docker套接字的访问权限会导致用户被集中到一个类别中,但连接到docker引擎的用户没有组或名称空间的概念。
对于多租户,docker需要添加一种方法来定义用户,并将其放置在只允许对特定容器和卷进行操作的名称空间中,并限制允许从容器中跳出的选项,如更改function或挂载任意来自主机的文件系统。 Docker的企业产品UCP通过在对象上使用标签来开始添加这些function,但是我没有时间来评估这是否能够提供完整的多租户解决scheme。
强硬的问题,其他人可能知道如何回答比我更好。 但是在这里呢。
我们来看这个多租户的定义( 来源 ):
多租户是一种软件应用程序的单个实例为多个客户提供服务的体系结构。
在这个定义中放置Docker是非常困难的。 可以认为它既是实例又是应用程序。 这就是混淆的来源。
让我们把Docker分成三个不同的部分: 守护进程 , 容器和应用程序 。
守护进程安装在主机上并运行Docker 容器 。 守护进程确实支持多租户,因为它可以在同一个系统上使用我的许多用户,每个用户在~/.docker
都有自己的configuration。
Docker 容器运行一个进程,我们将其称为应用程序 。
应用程序可以是任何东西。 对于这个例子,我们假设Docker 容器像一个论坛或者其他东西一样运行一个web应用程序。 论坛允许用户使用他们的名字login和发布。 这是一个服务于多个客户的单一实例 。 因此它支持多租户。
我们跳过的是容器和它是否支持多租户的问题。 这就是我认为你的问题的答案在哪里。
请务必记住,Docker容器不是虚拟机 。 当使用docker run [IMAGE]
,您正在创build一个新的容器实例。 这些实例是短暂的,不可变的。 他们运行一个进程,一旦进程存在就退出。 但是它们并没有devise成让多个用户连接到它们并同时运行命令。 这是多租户会是什么。 相反,Docker容器只是进程的独立执行环境。
从概念上讲, echo Hello
和docker run echo Hello
在这个例子中是一样的。 他们都在新的执行环境(进程与容器)中执行一个命令,两者都不支持多租户。
我希望这个答案是可读的,并回答你的问题。 让我知道是否有任何我应该澄清的部分。