6

Docker 示例之一是针对配置了 Memcached 的容器。我想知道为什么有人会想要这个而不是配置了 Memcached 的 VM?我猜想在同一主机下运行多个 memcached docker 容器是没有意义的,唯一真正的优势是在 docker 容器中“启动”memcached 堆栈与通过 VM 进行 Memcached 相比的速度优势. 这个对吗?

另外,如何在 docker 容器中设置 memcached 使用的内存?如果在一个主机下有两个或多个带有 Memcached 的 docker 容器,这将如何工作?(我再次假设两个或更多没有意义)。

4

3 回答 3

19

我想知道为什么有人会想要这个而不是配置了 Memcached 的 VM?

安全性:如果有人破坏了 memcached 并在文件系统上安装了木马,那也没关系——当你启动一个新的 memchached 时,文件系统就会被丢弃。

隔离:您可以硬限制每个容器以防止它使用过多的 RAM。

标准化:目前,每个应用程序/数据库/缓存/负载均衡器都必须记录要安装什么、要配置什么以及要运行什么。没有标准(也不缺少人偶、厨师等工具)。但是这些工具非常复杂,并不是真正独立于操作系统(尽管他们声称),并且从开发到部署都具有相同的复杂性。

使用 docker,一切都只是一个以run BLAH. 如果您的应用程序有 5 层,那么您只需运行 5 个容器,顶部还有一点点编排。除非他们在该层进行开发,否则开发人员永远不需要“查看容器”。

资源:您可以在普通 PC 上启动 1000 个 docker 容器,但启动 100 个 VM 会遇到麻烦。限制是 CPU 和 RAM。Docker 容器只是“增强的”chroot 中的进程。在 VM 上,有几十个后台进程(cron、logrotation、syslog 等),但docker没有额外的进程。

我猜在同一主机下运行多个 memcached docker 容器是没有意义的

这取决于。在某些情况下,您希望将 RAM 分成小块而不是全局。(即想象一下,如果您想将 20% 的缓存用于缓存用户,将 40% 的缓存用于缓存文件等)

此外,大多数分片方案很难扩展,因此人们通常从许多“虚拟”分片开始,然后在需要时扩展到物理盒子。因此,您可能会从您的应用开始了解大约 20 个 memcached 实例(根据对象 ID 选择)。起初,所有 20 个都运行在一个物理服务器上。但后来您将它们拆分到 2 个服务器 (10/10),然后拆分到 5 个服务器 (4/4/4/4),最后拆分到 20 个物理服务器(每个服务器 1 个内存缓存)。因此,您只需移动虚拟机而不更改您的应用程序,就可以将您的应用程序扩展 20 倍。

唯一真正的优势是在 docker 容器中“启动”memcached 堆栈与通过 VM 进行 Memcached 相比的速度优势。这个对吗?

不,这只是一个轻微的附带好处。看上面。

另外,如何在 docker 容器中设置 memcached 使用的内存?

docker run命令中,只需使用-m.

如果在一个主机下有两个或多个带有 Memcached 的 docker 容器,这将如何工作?(我再次假设两个或更多没有意义)。

同样的方法。如果你没有设置内存限制,那就像在主机上运行 2 个 memcached 进程一样。(如果一个填满了内存,两个都会出现内存不足的错误。)

于 2013-09-23T13:39:58.640 回答
2

这里似乎有两个问题......

1 - 好处如您所描述。您可以将 memcached 实例(和配置)沙箱到单独的容器中,以便您可以在给定主机上运行多个。此外,将 memcached 实例移动到另一台主机非常简单,在最坏的情况下只需要更新应用程序配置即可。

2 -docker run -m <inbytes> <memcached-image>将限制 memcached 容器可以消耗的内存量。您可以在单个主机下运行任意数量的这些。

于 2013-07-29T21:25:57.660 回答
0

我可能在这里遗漏了一些东西,但 Memcaching 只说明了内存使用情况,对吧?Docker 容器在磁盘空间使用方面也非常有效。您不需要每个 VM 上都有一个操作系统,但您可以共享资源。用 docker.io网站上的图片进行有见地的解释。

于 2013-07-30T12:45:06.843 回答