2016-09-26 72 views
0

我在容器中運行二進制協議TCP服務器。爲了促進零宕機升級,我構建了一個流,其中實例可以通過unix域套接字將其服務器套接字轉發到新容器中的服務器。這就像一個魅力,直到第一個容器關閉的時刻。由於它是發佈該港口的集裝箱,因此一旦集裝箱關閉,港口就會取消發佈。我試圖找出處理這種情況的最佳方法。共享兩個碼頭集裝箱之間的網絡端口

下面是我在做什麼的基本概要:

# start the first container, starts listening on 3290 
docker run -p 3290:3290 --name first /my/server/app 

# start the second container, "steals" the server socket on 3290 from first 
docker run --net container:first /my/server/app 

# the second container, at this point, is handling connections from 3290 
# when the first container is killed below, the port is de-published 
# and the second container stops receiving connections 
docker rm first 

起初,我認爲一個用戶定義的網絡將工作最好的,但我不能找到一種方法來發布關於用戶的端口 - 定義的網絡。我正在考慮的另一個選項是構建另一個處理端口發佈的容器,然後讓所有其他容器從該運行的容器中借用網絡。我認爲這種方法會起作用,我只是不喜歡這個額外的容器躺在其他地方沒有其他目的的想法。雖然也許這是唯一的解決辦法,思考?

+0

您是否嘗試過使用代理(如HAPROXY)?如果您使用的是DockerCloud,則只需使用服務端點即可進一步降低風險。然後使用HAPROXY指向各個服務。這意味着你可以有零宕機時間。 – AndrewL

+0

我已經考慮過使用HAPROXY,但由於幾個原因,我很猶豫。 當我檢查HAPROXY的配置頁面時,感覺它是爲HTTP服務定製的。我的服務是一個原始的二進制TCP服務器,所以我不知道它非常適合代理方式。雖然我可能會錯過一些東西。 –

+0

它可以用於多種服務,其主要用途是HTTP,但它可以處理任何TCP連接。對於我們的使用,我們有它處理HTTP流量,以及其他數據。 – AndrewL

回答

0

https://docs.docker.com/engine/swarm/

負載平衡:您可以公開對服務的端口,外部負載平衡器。在羣集內部,您可以指定如何在節點之間分發服務容器。

本帖子底部的視頻可能會對您有用:https://blog.docker.com/2016/06/docker-1-12-built-in-orchestration/

+0

我只在一個節點上運行它。 –

+0

IPVS適用於單節點:https://blog.codeship.com/kernel-load-balancing-for-docker-containers-using-ipvs/ –

相關問題