J.J. Huang   2019-06-04   Docker   瀏覽次數:次  

Docker - 第十五章 | 安裝Nginx Server

📑 目錄
  1. Nginx 是什麼?
  2. 搜尋 Image
  3. 拉取 Image
  4. 查看 Image
  5. 執行 Image
    1. 簡單啟動
    2. 掛載主機目錄
  6. 進入 Container
  7. 測試
  8. 其他指令

在前兩章中,有提教學如何使用Docker 建立ApacheApache Tomcat,這邊當然要介紹下Nginx的教學。

Nginx 是什麼?

Nginx(發音同engine x)是非同步框架的網頁伺服器,也可以用作反向代理、負載平衡器和HTTP快取。

反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連接請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連接的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。簡單來說就是真實的伺服器不能直接被外部網路訪問,所以需要一台代理伺服器,而代理伺服器能被外部網路訪問的同時又跟真實伺服器在同一個網路環境,當然也可能是同一台伺服器,埠不同而已​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​​​​​‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌‌​​​‌​​‌‌​‌​‌

負載均衡也是Nginx常用的一個功能,負載均衡其意思就是分攤到多個操作單元上進行執行,例如Web伺服器、FTP伺服器、企業關鍵應用伺服器和其它關鍵任務伺服器等,從而共同完成工作任務。簡單而言就是當有2台或以上伺服器時,根據規則隨機的將請求分發到指定的伺服器上處理,負載均衡配置一般都需要同時配置反向代理,通過反向代理跳轉到負載均衡。而Nginx目前支持自帶3種負載均衡策略,還有2種常用的第三方策略。

Nginx本身也是一個靜態資源的伺服器,當只有靜態資源的時候,就可以使用Nginx來做伺服器,同時現在也很流行動靜分離,就可以通過Nginx來實現。

這邊簡單的做介紹不特別在詳細說明。如果有興趣可以參考這篇文章我覺得不錯,裡面有詳細的說明和圖解。nginx是什麼?​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​​​​​‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌‌​​​‌​​‌‌​‌​‌

至於到這邊應該會有人問tomcat 與 nginx,apache的區別是什麼?

搜尋 Image

Searh指令進化一下,只搜尋10顆星以上的。

1
docker search -f=stars=10 nginx

Docker - 第十五章 - 圖 1 (01)​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​​​​​‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌‌​​​‌​​‌‌​‌​‌

拉取 Image

1
docker pull nginx

Docker - 第十五章 - 圖 2 (02)

查看 Image

1
docker images

Docker - 第十五章 - 圖 3 (03)

執行 Image

簡單啟動

1
docker run -d --name mynginx -p 8081:80 -d nginx
  • -d :後台執行 Container ,並返回ID
  • -p 8081:80 :將 Container 的 80 Port 映射到主機的 8081 Port (前面代表主機,後面代表容器)
  • -name mynginx :將 Container 取名為 mynginx
  • nginx :指定安裝的鏡像nginx

掛載主機目錄

先建立Nginx的資料夾,在裡面在建立三個目錄:​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​​​​​‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌‌​​​‌​​‌‌​‌​‌

  • www: 目錄將映射為 nginx 容器配置的虛擬目錄。
  • logs: 目錄將映射為 nginx 容器的日誌目錄。
  • conf: 目錄裡的配置文件將映射為 nginx 容器的配置文件。

使用簡單啟動,啟動容器,並且將預設設定檔複製一份出來:

1
docker cp 559e4f344765:/etc/nginx/nginx.conf /Users/morose/Documents/Temp/Docker/Nginx/conf/

啟動容器

1
2
cd /Users/morose/Documents/Temp/Docker/Nginx
docker run -d -p 8082:80 --name mynginx --restart always -v $PWD/www:/usr/share/nginx/html -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/var/log/nginx nginx
  • -d :後台執行 Container ,並返回ID
  • -p 8082:80 :將 Container 的 80 Port 映射到主機的 8082 Port (前面代表主機,後面代表容器)
  • -name mynginx :將 Container 取名為 mynginx
  • -restart always :如果 container 遇到例外的情況被 stop 掉,例如是重新開機,docker 會試著重新啟動此 container
  • -v $PWD/www:/usr/share/nginx/html :將主機當前目錄下的 www 掛載到 Container 的 /usr/share/nginx/html。
  • -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf :將主機當前目錄下的 /conf/nginx.conf 檔,掛載到 Container 的 /etc/nginx/nginx.conf。
  • -v $PWD/logs:/var/log/nginx :將主機當前目錄下的 logs 掛載到 Container 的 /var/log/nginx。
  • nginx :指定安裝的鏡像nginx

Docker - 第十五章 - 圖 4 (04)​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​​​​​‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌‌​​​‌​​‌‌​‌​‌

進入 Container

1
docker exec -it mynginx bash
  • -i :即使沒有附加也保持STDIN 打開
  • -t :分配一個偽終端

Docker - 第十五章 - 圖 5 (05)

測試

  • 開啟記事本建立一個index.html檔
  • 將下面html內容貼入並儲存
  • 將index.html,丟到掛載的目錄www下,將會自動編譯
  • 開啟瀏覽器 瀏覽 http://localhost:8082
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Nginx測試</title>
</head>
<body>
<h1>我的標題</h1>
<p>我的段落。</p>
</body>
</html>

Docker - 第十五章 - 圖 6 (06)

其他指令

如果要重新載入 NGINX 可以使用以下命令發送 HUP 信號到容器:​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​​​​​‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌‌​​​‌​​‌‌​‌​‌

1
docker kill -s HUP container-name

重啟 NGINX 容器命令:

1
docker restart container-name

恭喜你已經搭建了Nginx Server,這邊只是簡單的使用Docker快速建置,當然有更多詳細參數設定或是指令等等,這邊就不特別列出,畢竟我也不熟,哈。


註:以上參考了
dockerhubnginx 文章。
nginx
Docker 安装 Nginx
nginx是什麼?
tomcat 與 nginx,apache的區別是什麼?​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​​​​​‌‌​‌​​​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌‌​​​‌​​‌‌​‌​‌