現在我正在開發新內容,以便構建服務器。如何在Docker中組成容器?
在我的服務器上,基本系統是Cent OS(7),我安裝了Docker,取出了os並使用uwsgi和nginx建立了「WEB SERVER容器」Django。
但是我想要服務,(數據庫與Postgres),什麼是最好的辦法呢?
我的現有容器上安裝的Postgres(與Web服務器)
只爲數據庫建立了新的容器。
我想知道這些優點和弱點。
現在我正在開發新內容,以便構建服務器。如何在Docker中組成容器?
在我的服務器上,基本系統是Cent OS(7),我安裝了Docker,取出了os並使用uwsgi和nginx建立了「WEB SERVER容器」Django。
但是我想要服務,(數據庫與Postgres),什麼是最好的辦法呢?
我的現有容器上安裝的Postgres(與Web服務器)
只爲數據庫建立了新的容器。
我想知道這些優點和弱點。
如果要在重新啓動後將數據保留在數據庫中,數據庫不應位於容器中,而應位於主機上。我會假設你也想在容器中使用db。
設置第二個容器需要更多的工作。您應該找到容器瞭解彼此地址的方法。每次啓動容器時地址都會更改,因此您需要在主機上創建一些腳本。主機必須找出ip地址並通知容器。
容器可能需要使用其他容器的地址更新/ etc/hosts文件。當你想模擬不同的服務器並執行彈性測試時,這是一個很好的解決方案。在你運行良好之前,你需要一些bash知識。
在其他所有情況下,選擇一個容器。將所有東西安裝在一個容器中更容易設置和事後開發。設置Docker就是你想要做真正工作的環境。模具應該幫助你完成你的實際工作,而不是花費你所有的時間和精力。
它使用兩個單獨的容器是慣用的。此外,這更簡單 - 如果容器中有兩個或更多進程,則需要父進程來監視它們(通常人們使用諸如supervisord之類的進程管理器)。只有一個過程,你不需要這樣做。
通過監控,我主要表示如果容器收到SIGSTOP信號,您需要確保所有進程都正確關閉。如果你沒有正確地做到這一點,你將最終得到殭屍進程。如果您只有信號處理或使用流程管理器,則無需擔心此問題。另外,正如Greg指出的那樣,擁有獨立的容器可以讓您分別編排和調度容器,因此您可以在不影響其他容器的情況下更新/更改/縮放/重新啓動每個容器。
好的。我知道了。但我不知道什麼是技術問題?所以..這意味着只是一個監控問題? –
在應用程序中將單獨的容器用於單獨的進程只是更清潔。碼頭響應流程退出。如果postgres在一個容器中,而你的應用程序在另一個容器中,則postgres將知道何時「停止」。你可以把你的重新啓動邏輯放在你的容器中的一個更高級別(艦隊,庫布里埃斯,mesos)*而不是*。升級更容易,如果他們分裂(你可以想象得到一個更新的postgres圖像,而不改變你的應用程序圖像,反之亦然)。這很簡單(如果有3個或10個進程,你還會「合併」它們嗎?)。 – Greg
那麼,「在一個容器中安裝所有東西」的弱點是什麼?穩定性問題? –
不,它至少和兩個容器一樣穩定。運行在一個容器中很難測試數據庫服務器崩潰時Web服務器的反應。當然,您可以殺死數據庫偵聽器進程以獲取相同的結果。 –
OKAY !!非常感謝。但還有一件事,如何在主機上建立它?你推薦它嗎? –