2017-02-02 55 views
3

我想對使用Docker組織我的項目的最佳實踐有一些建議。在Docker上組織多層應用程序的最佳實踐

比方說,我有兩個主要應用程序Store和一個產品管理應用程序組成的項目X.他們是完全不同的應用程序,但是同一個項目的一部分。他們有自己的服務,源代碼,存儲庫和基礎設施。

店[MySQL和MongoDB的,elasticsearch,Nginx的,PHP應用程序的源代碼] PMA [mysql的,Nginx的,PHP應用程序的源代碼]

因爲它們是兩個不同的存儲庫,並擁有自己的碼頭工人,撰寫文件,我怎樣才能用一個命令來運行一切?

我應該創建一個docker repo嗎?這個docker repo擴展了docker-compose和一次只能運行一切嗎?

回答

0
  • 孤立的事情,儘可能,所以如果你需要一個MySQL和 的MongoDB將它們分開,使容器儘可能小, 只有他們所需要的庫和二進制文件(又名 microcontainers)。要達到此目的,您還可以使用alpine linux構建圖像 。
  • 對於數據庫容器,使用卷將數據存儲在主機 而不是容器中,運行速度更快。您還可以將配置文件存儲在一個卷中,以便每次要更改配置時都不必訪問該容器。
  • 使用Dockefiles而不是手動構建圖像,這使得 圖像可以在任何主機中複製,並且可以將它們存儲在git中。
  • 使用docker撰寫一次構建並運行所有容器。
0

首先,我不建議容器化數據庫。沒有太多的好用例,因爲很多複製只是通過少數主機上的IO和磁盤利用率來咀嚼。您還會失去很多針對數據庫/數據存儲的典型專業化和維護/管理。

創建Dockerfiles的git存儲庫。它使得更新系統在未來更容易。我的結構通常是

/Dockerfiles 
    /Project 
     Dockerfile 
     (required files) 
     docker-compose.yml 

也有一個私人註冊表,但從上述dockerfiles建立這些圖像。使管理版本變得更加容易,並且便於啓動和自動部署。

  1. 創建羣簇(1個或多個主機)
  2. 創建兩個覆蓋網絡(命名爲存儲和PMA如果你喜歡)
  3. 創建共享NFS存儲指向被安裝到主機並/搬運工。裝載點需要在讀取,寫入和執行泊塢窗組。這將用於elasticsearch集羣上的持久存儲
  4. 在商店網絡上爲php-fpm(運行源代碼),NGINX代理它和彈性搜索創建服務。他們可以互相引用覆蓋網絡上的名字
  5. 的PMA網絡PHP-FPM,nginx的(代理)

你也可以只創建阿帕奇/ PHP的圖像上創建服務。這就是我們爲beadockstar/laravel所做的。

請注意PHP系統上的存儲空間。如果您需要上傳而不是將被抽象爲某種類型的CDN,則需要確保將上傳目錄保存到/ docker主機目錄(或任何其他統一主機目錄跨所有羣主機)