2013-07-29 43 views
6

其中一個Docker示例適用於配置了Memcached的容器。我想知道爲什麼要用這個配置Memcached的虛擬機呢?我猜測,在同一主機下運行多個memcached docker容器是沒有意義的,唯一真正的優勢是速度優勢是通過VM將docker容器中的memcached堆棧與「Memcached」「輪換」 。它是否正確?Docker容器對於memcached實例的好處是什麼?

另外,如何設置內存供docker容器中的memcached使用?如果在一臺主機上有兩個或多個使用Memcached的Docker容器,這將如何工作? (我再次假設兩個或更多不合理)。

回答

2

這裏似乎有兩個問題......

1 - 好處就像你描述的那樣。您可以將memcached實例(和配置)沙箱化爲單獨的容器,以便您可以在給定主機上運行多個容器。另外,將memcached實例移動到另一個主機是非常簡單的,只需要在最壞的情況下更新應用程序配置。

2 - docker run -m <inbytes> <memcached-image>會限制memcached容器可能消耗的內存量。您可以在單個主機下運行儘可能多的這些。

0

我可能在這裏錯過了一些東西,但Memcaching只說了一些關於內存使用情況的東西,對吧? Docker容器的磁盤空間使用效率也非常高。你不需要每個虛擬機上都有一個操作系統,但是你可以共享資源。深入瞭解docker.io website上的圖片。

18

我在想爲什麼要用這個配置Memcached的虛擬機呢?

安全:如果有人打破了Memcached和木馬文件系統,它並不重要 - 文件系統被當你開始一個新的memchached扔掉。

隔離:您可以硬限制每個容器,以防止它使用太多的RAM。

標準化:當前,每個應用程序/數據庫/緩存/負載均衡器必須記錄要安裝的內容,要配置的內容以及要運行的內容。沒有標準(也不缺乏木偶,廚師等工具)。但是這些工具非常複雜,並非真正獨立於操作系統(儘管他們聲稱),並且從開發到部署都具有相同的複雜性。

隨着碼頭,一切都只是一個容器開始run BLAH。如果您的應用程序有5個圖層,則只需要5個容器即可運行,並且頂部只有一點編排。除非開發人員在該層開發,否則開發人員無需「查看容器」。

資源:您可以在普通PC上啓動數千個Docker容器,但是在啓動數百個虛擬機時會遇到麻煩。限制是CPU和RAM。 Docker容器只是「增強」chroot中的進程。在虛擬機上,有幾十個後臺進程(cron,logrotation,syslog等),但是docker有額外的進程。

我猜,這將毫無意義具有相同的主機

這取決於下一個以上的memcached泊塢窗容器中運行。在某些情況下,您想將RAM分割成宗地而不是全球分割。 (例如,想象一下,如果您想將20%的緩存用於緩存用戶,並將40%的緩存用於緩存文件等)。

此外,大多數分片方案難以擴展,因此人們通常以很多'虛擬'碎片,然後在需要時擴展到物理盒子。因此,您可以從您的應用程序開始瞭解大約20個memcached實例(根據對象ID選擇)。起初,所有20個在一臺物理服務器上運行。但是稍後你將它們分成2臺服務器(10/10),然後分到5臺服務器(4/4/4/4),最後到20臺物理服務器(每臺1個memcached)。因此,您可以通過移動虛擬機來擴展應用程序20x,而無需更改您的應用程序。

唯一真正的優勢是速度優勢是通過虛擬機將Docker容器中的memcached堆棧與「Memcached」相提並論。它是否正確?

不,這只是一個輕微的副作用。往上看。

此外,如何設置內存供docker容器中的memcached使用?

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

如果在一個主機下有兩個或多個Docker容器與Memcached,這將如何工作? (我再次假設兩個或更多不合理)。

相同的方式。如果您沒有設置內存限制,那麼就是,就像在主機上運行2個memcached進程一樣。 (如果有人填滿了內存,兩者都會發生內存不足錯誤。)

+0

非常感謝您對我的問題提供了清晰準確的答案! – bhartsb