2016-11-14 20 views
-1

我有一個定期更新的數據處理應用程序。這個應用程序有一堆依賴關係,它們也會隨時更新。但是,不同版本的軟件(+相關性)可能會產生不同的結果(這是預期的)。該應用程序在遠程計算機上運行,​​可通過網頁訪問。每次用戶使用網頁進行一些處理時,他/她也會選擇他/她想要使用的軟件版本。使用Docker跟蹤軟件版本/安裝?

現在我正在嘗試確定哪些是跟蹤不同軟件(+依賴項)版本的最佳方式。當然最簡單的方法就是將我的軟件及其依賴項的每個版本編譯並安裝到不同的文件夾中,然後根據用戶發送的請求選擇合適的文件夾。但是,這聽起來對我來說很笨拙。所以我想我可以使用Docker來跟蹤不同的軟件版本。你認爲這是一個好主意嗎?如果是的話,每當我有新版本的軟件(和/或依賴)時,最適合做什麼:1)用新版本從頭開始創建一個新容器(並且最終具有多個容器),或者2)更新現有容器並提交更改? (我想我可以訪問容器的老版本,對嗎?)

PS:請記住,我研究Docker而不是簡單的虛擬機解決方案的原因是,我運行的應用程序是高性能的,高性能的基於GPU的軟件。

+3

不要更新容器。製作一個新的圖像,開始一個新的容器。容器應該是一次性的,如果你有它的任何狀態,那麼將這個狀態外部化(數據庫或卷掛接)。 – Thilo

回答

1

Docker是一個合理的選擇。您的存儲庫將包含您希望發佈的所有應用程序版本。請注意,如果您將生成的應用程序文件系統組織爲圖層,則只會實現節省,其中較低層的版本間變化最小。這將使存儲要求保持在最低限度。

然後你必須決定你將如何處理每項工作。一個強大的(但複雜的)解決方案應該是擁有一個或多個API容器,用於處理來自用戶的作業,並將它們「發佈」給工作容器(每個發佈版本中有一個或多個)。這將提供最低的響應延遲並且是非阻塞的。您可以查看不同的服務發現模型,以瞭解您的「工作人員」容器如何向您的「經理」容器註冊。這可能比你想要咬的更多,但考慮使用一個好的鍵值數據庫(另一個容器!)像etcd或像zookeeper/eureka/consul這樣的第三方服務發現工具。

一個簡單得多的模型會有一個API容器,每個容器創建一個,但沒有啓動。 API容器將啓動,指導,然後停止適當的釋放容器。你會招致啓動延遲,但這是資源密集度最低的...並且最容易管理。但這是一個阻塞操作。

中間的某個地方,但用戶不太友好的地方是讓每個發佈容器都在運行,但在不同的主機端口上偵聽(應用程序總是看到相同的端口)。用戶會連接到服務於應用程序所需版本的端口。你必須提供某種索引才能使它有用。