本章我們主要講解如何通過docker構建一個nginx容器,這里我們以部署一個靜態html為素材來進行演示。
首先我們通過【docker search nginx】命令來查找Docker Hub上的nginx鏡像:

這里我們拉取官方的鏡像就可以了,通過【docker pull nginx】命令。
拉取完以后,我們查看一下本地的鏡像列表【docker images】:

nginx已經有了,其他的幾個鏡像不用管,是我做別的demo時用過的。
好了,有個nginx鏡像以后,我們就可以通過這個鏡像來構建一個包含nginx的容器,通過這個容器,我們可以運行我們的demo項目。
在構建容器之前,我們先准備好我們的素材,也就是靜態html和nginx相關配置,我這邊在centos上建了一個home目錄,里面有application和config兩個文件夾,一個存放網站發布文件,一個存放配置。各自的路徑和文件如圖:

demo.html里面沒內容,只是一個標准的html文件,default.conf文件則是nginx部署網站的配置:

listen是端口,默認80就可以了,這個是網站在服務器的內部端口,外網通過這個端口是訪問不到站點的。到時候容器運行時會做端口映射,重新指定端口供外網訪問。server_name后面寫localhost表示本地即可,location里面的root表示nginx部署站點所在文件路徑,由於我們是容器部署,所以這里的/app路徑其實是容器的目錄。index是啟動項,我們設置為我們的demo.html即可。
網站文件和nginx配置准備好了以后我們就可以開始通過nginx鏡像來構建我們的容器了,容器都有自己的目錄的,但是為了方便操作以及做持久化,我們會通過docker運行容器的-v參數來做目錄掛載。
運行容器的命令【docker run -d -p 8086:80 -v /home/application/demo:/app -v /home/config:/etc/nginx/conf.d --name demo nginx】
首先我來說一下這幾個參數,docker run 是運行一個容器的意思,-d 表示后台運行 -p 8086:80表示將內部的80端口映射到外網8086端口上,-v表示掛載目錄,格式是 -v 宿主機目錄:容器目錄。上面的命令中我們指定了網站資源文件路徑和nginx配置,分別對應我們之前在宿主機的home文件里面放好的兩個文件夾。
執行完上面的命令以后會出現一行字符串,即表示運行成功:
![]()
緊接着我們通過【docker ps】命令來查看我們正在運行的容器:

可以看到一個名為demo的容器已經在運行了,從左往右我們依次可以看到容器id、基於的鏡像、執行的命令、創建時間、狀態、端口、容器名稱。
最后,我們通過IP+端口的形式即可打開我們部署的頁面了:

Remarks:
以上教程需要注意的地方:如果是新購的服務器,或者對服務器不熟悉的同學,實踐以后發現ip+端口打不開部署好的網站,那么多數情況下就要檢查服務器上是否開發了相應端口,以博主為例,使用的是阿里雲服務器,在安全組規則里,相關端口都是打開的。另外,本文提到了一個掛載目錄的操作, 這個操作可以將宿主機目錄掛載到容器目錄,從而實現容器的可持續化,一般像容器內的日志啊,產生的數據文件啊,都可以通過掛載的方式掛到宿主機,這樣即便容器沒了,宿主機也會有記錄文件。還有一點就是,如果你不喜歡掛載這個操作,覺得以后刪除容器以后還得再刪宿主機下的文件夾比較麻煩,而且自己的業務場景不需要做可持續,那么在創建容器的時候,可以不使用-v命令,而是直接創建,等創建成功以后,通過docker cp命令來實現宿主機文件到容器目錄的拷貝操作,命令格式是 docker cp 宿主機目錄:容器目錄,具體用法我這里就不多講了,大家線下多實踐。
