2016-04-03 88 views
0

你們如何處理Docker容器的Web應用程序文件?我們爲> 400個客戶使用相同的應用程序。這是與啓用/禁用模塊相同的應用程序(有額外的文件)。如何在Docker中處理Web應用程序的文件?

我目前正在使用這種方法:構建圖像,例如,對於MySQL,Nginx的+ PHP,然後用特定的準備應用程序文件夾啓動容器:

docker create -v /dbdata --name dbstore x/mysql /bin/true 
docker run -d --volumes-from dbstore --name db1 x/mysql 
docker run -d -P --name web --link db1:db1 -v /webapp:/opt/webapp x/webapp php-start index.php 

恕我直言,這是一個空間過度使用。 我認爲創建> 100個webapp docker數據容器標籤(修訂版)有點複雜。 請教如何解決這個問題?

回答

2

首先,最新版本的Docker允許您創建並使用named volumes。這意味着「數據專用容器」已經過時並且不再需要,事實上這些日子事實上被認爲是反模式。這是非常簡單的創建和使用一個名爲卷:

docker volume create --name=foo 
docker run -d -v "foo:/dbdata" --name "db1" x/mysql 

您可以查看您的卷:

docker volume ls 

至於你的主要問題,你可以採取多克的union filesystem的優勢(這也可能更簡單地稱爲「共享層」)設計。這意味着如果你從Ubuntu鏡像創建了兩個容器(例如docker run -d --name=one ubuntudocker run -d --name=two ubuntu),那麼這兩個容器都將在基本ubuntu鏡像中使用相同的文件系統對象。因此,例如,這兩個容器中的/etc/passwd文件都指向存儲在磁盤上的相同/etc/passwd數據。這是Docker上下文中「union filesystem」一詞的一部分。

所以,只需將這些知識進一步深入並將這些模塊「烘烤」到您的基礎圖像中,供所有不同客戶的容器使用。這只是意味着從頂部使用FROM wordpress:latest的Dockerfile創建自己的圖像。繼續WordPress的例子,如果你想製作一堆WP插件,你可以將它們存儲在/var/www/html/wp-plugins(或其他)中,並且只在你的配置中啓用某些WP插件。由於它們被烘焙到您創建的映像中(並使用相同的映像來創建所有不同的容器),所有這些模塊文件都通過聯合文件系統指向存儲在磁盤上的相同確切數據。當然,如果有人更改其模塊中的代碼,例如,單個容器的圖像將在其自己的圖像層中存儲更改,但基本文件將全部來自相同的數據,而不會佔用任何額外的空間。當然,您可以用您使用的任何CMS進行替換。

現在,在我工作的地方,我最近創建了一個基於Docker的託管系統供人們使用。問題是我們希望每個客戶都擁有自己的CMS文件系統副本。即使聯合文件系統意味着對基本映像的更改將存儲在其自己的映像層中,但對於簽署薪水檢查的人員來說,這還不夠好。他們希望每個客戶都擁有自己的EBS卷,並擁有自己的CMS文件系統副本。因此,在這種情況下,您希望每個客戶擁有自己的音量(例如,爲了傳輸它們進行備份,或轉移到新的主機等),那麼您將無法解決問題爲這些文件使用額外的存儲空間。

1

這取決於:

如果文件是靜態的,你要能夠圍繞輕鬆移動容器,然後我把文件放在容器通過只將它們複製到Web位置的單一目錄。

如果你有一個可靠的外部的位置,並(通過使用某種形式的CMS爲例)更改文件的詳細規則,你可以只運行在Apache或nginx的容器和安裝卷

+0

這是某種CMS –

相關問題