为什么Docker不支持多租户?

10
我看了这个关于Docker的YouTube视频,在22:00处,演讲者(一位Docker产品经理)说道:

"你可能会认为'Docker不支持多租户'...而你是正确的!"

但是他并没有解释为什么。所以我想知道:他的意思是什么?Docker为什么不支持多租户?! 如果你在谷歌上搜索“Docker多租户”,你会惊奇地发现没有任何结果!
2个回答

8

多租户工具最重要的特点之一是每个租户之间的隔离。他们不应该能够看到或管理其他人的容器和/或数据。

docker-ce引擎是一个系统管理员级别的工具。任何可以使用任意选项启动容器的人都具有主机的根访问权限。有第三方工具,如twistlock,可以连接认证插件接口,但它们只提供粗略的访问控制,每个人只允许或禁止执行整个活动类别,如启动容器或查看日志。将用户访问TLS端口或docker套接字会导致用户被归为单个类别,没有用户连接到docker引擎的组或命名空间的概念。

对于多租户,docker需要添加一种定义用户并将其放置在仅允许在特定容器和卷上操作的命名空间中的方法,并限制允许突破容器的选项,例如更改功能或从主机挂载任意文件系统。 Docker的企业版UCP通过在对象上使用标签来开始添加这些功能,但我还没有时间评估这是否提供了完整的多租户解决方案。


1
有了足够的配置,您可以使用UCP设置多租户环境。我还知道更多的认证授权插件,包括Open Policy Agent和Harbormaster。@MeysamJavadi - BMitch

5
这是一个比较棘手的问题,可能有其他人比我更擅长回答。但是我会尽力解答。
让我们先看一下“多租户”(multi tenancy)的定义(来源于这里):
“多租户是一种架构,一个软件应用程序的单个实例可以为多个客户提供服务。”
很难把Docker放在这个定义中。可以说它既是实例又是应用程序,这就导致了混淆。
我们将Docker分为三个部分:守护进程(daemon)、容器(container)和应用程序(application)。
守护进程安装在主机上并运行Docker容器。守护进程确实支持多租户,因为它可以被同一系统上的多个用户使用,每个用户都有自己的配置文件在~/.docker中。
Docker容器运行单个进程,我们称之为应用程序。
应用程序可以是任何东西。例如,假设Docker容器运行一个像论坛之类的Web应用程序。该论坛允许用户登录并在其名称下发布文章。它是一个为多个客户提供服务的单个实例,因此支持多租户。
我们忽略的是容器和它是否支持多租户的问题。这就是我认为你问题的答案所在的地方。 重要的是要记住,Docker容器不是虚拟机。 当使用docker run [IMAGE]时,您正在创建一个新的容器实例。这些实例是短暂且不可变的。它们运行单个进程,并在进程退出时退出。但是它们并不设计为让多个用户连接到它们并同时运行命令。这就是多租户的含义。相反,Docker容器只是用于进程的隔离执行环境。
概念上,在这个例子中,echo Hellodocker run echo Hello是一样的。它们都在新的执行环境(进程与容器)中执行命令,都不支持多租户。
希望我的回答清晰易懂,能够解答你的问题。如果有任何需要澄清的地方,请告诉我。

在这个例子中,如果我的容器运行Ubuntu Bash shell,并允许进入到进程/容器中...是否可以支持多个人以不同的Unix用户身份进行操作,拥有自己的根目录? - bjm88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接