Docker 建立 Nginx 基礎分享

Lou
7 min readAug 13, 2018

--

好吧,身為後端新手的我有個困擾,常常搞不清楚狀況就把伺服器的環境搞得亂七八糟,以至於花許多時間在重建環境上。還好現在有個東西叫Docker,隨時可以砍掉重練的精神拯救了我許多時間跟體力。

然而在看網路上資料時遇到了一些讓我困擾問題…什麼是Dockerfile跟docker-compose.yml?他們在哪裡?他們要放哪裡?如何使用…等,也許這些知識太基礎,不值一提,又或著是我自己沒有好好看人家寫的文章內容…等。

總之,在這邊跟大家分享如何在Docker建立一個基本的Nginx 環境。

讀這篇文章前需要具備的東西及知識:

  1. 看得懂HTML檔案內容
  2. 電腦有安裝Docker
  3. 了解Docker內 Image 跟 Container區別
  4. 知道Nginx 是什麼
  5. 一點Nginx config基礎

目標:

使用Docker 建立Nginx container,並使用該container 跑HTML檔案

Docker官網上提供了三種建立Nginx container的方式

  1. 使用Docker指令建立
  2. 使用Dockerfile
  3. 使用docker-compose.yml

這篇文章先不解釋用docker-compose.yml,接下來為各位分享前兩種方式。

使用Docker指令建立Nginx 環境:

Step1:在你喜歡的資料夾裡,建立一個index.html檔案

index.html 內容<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Docker nginx</title>
</head>
<body>
Hello world!
</body>
</html>

Step2:下載Nginx image

打開terminal不需要到任何指定的資料夾, 直接輸入 docker pull nginx 即可下載最新的Nginx

輸入 docker images 可以查看目前在本地所有的docker image

可以看到本地docker image庫裡已有nginx

Step3:創建並啟動Nginx container

在terminal內輸入以下指令,粗體字照自己規劃更改

docker run --name container名稱 -p 8080:80 -v index.html所在路徑:
/usr/share/nginx/html -d nginx

指令解釋:

docker run:創建docker container的指令

--name container名稱:container名稱自己取

-p 8080:80:將local 8080 port 指向 container的 80 port

-d nginx:選擇container要裝的image(在這裡要裝的是nginx)

-v index.html 所在路徑:/var/www:如下圖

將index.html複製到nginx /usr/share/nginx/html目錄下

輸入 docker ps 可以查看正在run的container,如果上面的指令創建成功,會看到以下的結果

名為nginx_2的container 正在run

最後在瀏覽器內輸入 localhost:8080 如下

在瀏覽器內輸入localhost:8080 會顯示上圖

另外,如果在創建時沒有將 index.html 的資料夾指定給container,也就是說沒有打-v … :/usr/share/nginx/html的話,會出現nginx default的畫面,如下圖

使用Dockerfile建立Nginx環境:

Step1:在你喜歡的資料夾裡,建立一個下面三個檔案,並且將terminal移到該檔案路徑

  1. index.html
  2. nginx.conf
  3. dockerfile
index.html 內容<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Docker nginx</title>
</head>
<body>
Hello world!
</body>
</html>nginx.conf 內容參考server{
listen 80 default_server;
listen [::]:80 default_server;
server_name lou.com;
root /usr/share/nginx/html;
index index.html;
charset utf-8;
access_log /var/log/nginx/access_log;
error_log /var/log/nginx/error_log;
}
dockerfile 內容FROM nginxCOPY index.html /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf

dockerfile 內容說明:

FROM nginx:要安裝的image

COPY index.html /usr/share/nginx/html:將index.html 複製到nignx內 /var/www目錄下

COPY index.conf /etc/nginx/conf.d/default.conf:複製conf檔到nginx內

Step2:使用Dockerfile創建image

terminal內輸入 docker build -t image名字:image版本 .

指令解釋:

docker build:使用Dockerfile創建image的指令

-t image名字:image版本: 自訂image名字跟版本,若沒輸入版本則為預設值latest

.: dockerfile的路徑,因為我們的terminal已經移到dockerfile的路徑,所以只需打一個 .

輸入 docker images 查看是否創建成功

REPOSITORY:image 名字,TAG:image 版本

Step3:創建並啟動 container

因為已經在Dockerfile內把index.html複製到nginx container內了,所以在創建時不需要再輸入複製的指令

docker run --name container名字 -p 8080:80 -d image名字

成功後可以在瀏覽器看到Hello World!

lou.com這個名稱是在nginx.conf 內的 server_name 可以設定

--

--