2016-10-04 138 views
1

當我閱讀關於Nginx和Docker的一些文章時。我知道Nginx是一個Web服務器,它的工作是獲取來自客戶端的請求並向特定的應用程序內部機器發送請求。 Docker是一個容器,它可以包含我的應用程序。它可以包含很多東西,比如db,web應用程序。它可以像Unix機器一樣安裝一些軟件包。
我的問題是配置Nginx用於Docker應用程序。我們將安裝Nginx內部Docker或內部我們的機器(ubuntu或Centos ...)?
Nginx是內部還是外部Docker

回答

0

它可以在兩者上。在可擴展性方面,我會選擇一個自己的docker容器。這樣,您可以不同地增長您的前端和web服務器(或反向代理),並獲得dockerized版本的好處(放入另一個實例和/或服務器,轉到雲等)。

1

NGINX將存在在碼頭集裝箱內。您將在容器中打開端口80,以允許主機向Docker容器內的NGINX發出HTTP請求。

您可能希望在dockerfile中使用官方的NGINX docker容器。

https://hub.docker.com/_/nginx/

你dockerfile將有...

FROM NGINX(頂部)

EXPOSE 80(HTTP)

EXPOSE 443(HTTPS)

然後當您運行碼頭集裝箱時,使用-P(大寫字母P)標誌使兩個暴露的端口可用於主機。

+0

端口80是內部的Docker。但用戶請求發送到我們的機器(CentOS,ubuntu ...)。我們的機器如何在沒有NginX的情況下將請求路由到Docker? –

+1

你需要像NGINX一樣的網絡服務器 - docker只包含webserver ...你可以在運行容器時通過-p 1245:80映射端口,然後訪問主機上的端口1245以在容器內點擊NGINX – danday74

3

您需要在自己的容器中運行Nginx,在該容器中將端口發佈到主機,因此當請求進入主機端口80時,Docker會將其指向Nginx容器進行處理。

應用程序的所有其他部分(Web前端,API,數據庫,緩存等)都在它們自己的容器中運行,Nginx是需要外部提供的任何代理。

主要優點這種方法:

  • 你建立你的所有的Nginx配置成碼頭工人的形象,所以你可以運行任何地方,你不需要複製周圍conf文件;
  • 您對主機的依賴性最小 - 當您添加新機器或將其替換時,您只需要安裝Docker,然後運行所有容器;
  • 您的應用程序容器不需要公開可見 - 如果您在主機上運行Nginx,那麼爲了代理您的應用程序,他們需要將其端口發佈到主機。通過在Docker網絡中運行容器中的所有內容,應用程序不需要發佈其端口,例如應用程序容器中的端口5000可用於Nginx容器,但不在主機上。
相關問題