2017-07-16 53 views
4

我一直在學習如何使用Docker來設置開發環境,但是,我很好奇這些想法是如何轉化爲生產堆棧的。舉個例子,我有一個使用MySQL,Redis和Nginx的Laravel(Php)應用程序。瞭解生產中的Docker

因此,在生產中,比方說,我通常會在AWS上的負載均衡器後面有兩個應用程序ec2實例。當使用Docker設置類似的生產環境時...

1)因爲我會使用RDS和Elasticache,所以不需要容器。所以基本上,id只需要PHP-Fpm和Nginx的容器? 2)爲了獲得高可用性,ELB後面仍然會有2個(或至少多於1個)ec2實例。所以我想每個實例都會運行上述容器(PHP和Nginx)。但是,這聽起來和我以前的VM設置沒有什麼不同,每個服務器都運行它爲服務應用程序提供的服務。這是否準確? 3)使用虛擬機時,我通常會將代碼烘焙到AMI中,然後將這些AMI添加到啓動配置和Auto Scaling組中,並且該組將根據需要啓動實例。因此,爲了部署,我會拆除舊的ec2實例並啓動新的實例。使用Docker,由於這些容器將在ec2實例上運行,我是否還需要啓動/拆卸虛擬機,還是隻更換容器並保持虛擬機運行?

回答

4

它合理地保持碼頭環境以外的RDS,Elasticache和其他完全託管的服務。是的,對於高可用性,您需要運行docker守護進程的多個EC2實例。

真正的優勢不在於有兩個EC2實例在它們中的每一個上運行兩個Web服務器泊塢窗容器。當您將應用程序分解爲微服務時,真正的優勢來自於多個容器組合在一起構建提供benefits of microservices的Web應用程序。

除此之外,DevOps流量與EC2中的傳統Web應用程序部署相比具有自動縮放和負載平衡,並且具有許多benefits。例如,您的源代碼也將包含容器代碼,這將保證環境在您的舞臺和製作過程中均勻工作。你也將有圖像指向你的源代碼控制中的分支/標籤,它允許爲新版本獲得新的更新(增量下載)。

如果您要在AWS中設置docker,建議您使用AWS ECS來降低管理開銷。

+0

感謝您的信息。因此,潛在的情況是,因爲我的應用程序僅僅是一個基本的API,並且可能沒有地方可以提供微服務,但是我可能沒有從Docker中受益。 – djt

+0

是的,如果它是一個簡單的API,你可以暫時保留它。當它變得越來越複雜時,你可以開始dockerizing應用程序,然後通過chuck設備緩慢地chunk到微服務。 – Ashan

2
  1. 你是對的,你只需要在一個容器中運行你的代碼,它只會訪問遠程服務。唯一需要考慮的是確保與他們的連接。

  2. 你說得很對,你需要擁有你以前在Docker容器中的虛擬機中擁有的所有東西,這樣你的代碼才能像以前一樣工作。無論如何,通過Docker容器,可以在同一個EC2實例上運行多個應用程序實例。當然,你的應用會嘗試在同一個端口上運行,因此需要一些額外的網絡層來管理端口,但這是可能的。所有EC2實例都需要安裝docker。

  3. 您不必創建AMI並關閉和旋轉EC2實例,而只需拖動新的Docker映像並使用新映像重新啓動容器。與EC2實例流程中的分鐘相比,這意味着只需幾秒鐘。這意味着您可以非常快速地恢復部署,併爲可以達到0%停機時間的設置打開大門。

+0

感謝您的信息。因此,現在看來,因爲我的應用程序不需要很多容器的方式,所以我可能只能從快速部署中受益 - 至少在我需要通過容器的方式更多 – djt

+0

IMO的最大優勢是快速部署。這很大程度上取決於您部署到生產的頻率以及您接近100%的正常運行時間的重要性。如果你有罕見的部署,你可能不會從遷移到Docker中獲益。 – bogdanciobanu

+0

Docker中的「快速部署」實際上取決於其他因素以及您認爲的「部署」。實際上,Docker實際上增加了一些步驟,人們通常應該在端到端的部署時間中包含這些步驟。有構建Docker鏡像(這通常是對當前構建過程的補充,並會增加一些時間),將鏡像推送到註冊表(鏡像需要可用於服務器拉取),然後將鏡像拉到所有服務器。在一天結束時,Docker可能不會比目前的方法更快。食物的思想。 –