我想知道为什么有人会想要这个而不是配置了 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 进程一样。(如果一个填满了内存,两个都会出现内存不足的错误。)