2015-07-20 28 views
2

我搞清楚如何設置我的生產服務器的最佳方式,但我有點卡住有關如何正確地做到這一點:碼頭工人,和小生產的服務器基礎設施的通知:

目前,所有我的網頁應用dockerified,我有:

  • 一個nginx的前方的容器中,該路由請求至數後端容器:
    • 一個Symfo紐約應用
    • 兩個WordPress的博客
    • 一個的NodeJS應用
  • 一個用於數據庫存儲的MySql容器
  • 一個MongoDB的容器也

ALL這個基礎設施是用碼頭工人開始 - 組合

這工作不錯,但它聽起來太「monolitihic」我:

  • 我不能沒有重新啓動所有其他的停止一個容器。
  • 我不能沒有重新啓動一切
  • 我沒有辦法在崩潰之後自動重新啓動容器中添加其他Web應用程序...

這是我第一次這樣做,你知道一些最佳實踐或軟件可以幫助我改進生產服務器?

非常感謝!

回答

3

我不能停止一個容器而不重新啓動所有其他容器。

什麼阻止你當你想只停一個容器使用docker stop命令而不是docker-compose stop命令?

我不能沒有重新啓動一切

我會建議使用優秀jwilder/nginx-proxy nginx的泊塢窗圖像作爲在其他容器的前反向代理添加其他Web應用程序。這個反向代理將適應運行/停止的容器。您稍後可以添加容器,並且此反向代理將根據域名自動將流量路由到它。

我無法在崩潰後自動重啓容器......

看看在restart:指令爲泊塢窗,compose.yml文件。

+0

我已經想過* nginx-proxxy *。我實際上沒有使用它,原因如下: 我想nginx-proxy不會提供靜態資產,所以我的所有應用程序容器都必須嵌入自己的nginx http服務器。 這聽起來不錯,因爲它帶來的靈活性,但我不知道它是不是過度殺傷?即:如果我的服務器託管4個應用程序,我需要啓動5個nginx實例實例,只有1個....您對此有何看法? – Clement

+0

我的看法是,nginx-proxy安裝起來非常簡單,而且易於維護(因爲它只是使用'VIRTUAL_HOST'環境變量),開銷可以忽略不計。另外,如果有一天我在一臺服務器上安裝了很多項目,那麼告訴我以後我不需要在兩臺服務器上拆分這些項目?或者其中一個項目會在其他項目之前結束?由於他們的生命週期可能不同,我喜歡讓他們分開的想法。 – Thomasleveil

0

docker-compose的「monolithic」視圖的確可以讓你以一種方式管理你的應用程序堆棧。但是需要知道docker-compose是Docker頂層的一個「層」,您仍然可以使用它(docker)。

正如@thomasleveil所說,您仍然可以使用docker單獨處理docker-compose創建的容器。

$ docker exec project_web_1 ls -l/
$ docker stop project_db_1 
$ docker up -d project_nginx_1 
$ ... 

在另一隻手,我建議更多地依靠搬運工,撰寫這也使得作用於單個容器,分開你的不同的應用或環境,並知道容器(並非全部)之間的相關性。

$ docker-compose exec web ls -l/
$ docker-compose stop db 
$ docker-compose up -d nginx 
$ ... 

引導了一個新的服務也很容易泊塢窗,撰寫的,因爲它能夠基於你的陽明配置沒有的東西,如果沒有必要停止任何東西。

$ docker-compose up -d 
project_web_1 is up-to-date 
project_db_1 is up-to-date 
Creating project_newservice_1 

我還發現反向代理的幫助對於生產安裝非常有用。不過,我會更多地推薦全新的Traefik,它帶來了諸如熱重裝,服務發現,Letsencrypt自動化SSL認證和更新(不完全)等不錯的功能。