nginx的作用很多,例如正向代理、反向代理、負載平衡、透明代理等,一般情況下使用較多的是反向代理和負載平衡。我們只需要在本地同步設定文件,就能完成這些操作。要建立nginx的設定文件,首先需要在/etc/nginx/目錄下新建一個名為nginx.conf的文件
nginx1目錄下的nginx.conf也要創建,內容空著就行。接下來查看鏡像是否正常:
如果還沒有下載鏡像,使用以下命令拉取鏡像(預設最新版):
docker pull nginx
接下來運行容器:
docker run -itd -p 80:80 --name nginx001 -v /docker/nginx1/nginx.conf:/etc/nginx/nginx.conf nginx
解釋:
-itd:開啟互動模式,模擬終端,後台運行
-p 80:80:對應埠對應到宿主機
--name nginx001:自訂容器名稱
-v /docker/nginx1/ nginx.conf:/etc/nginx/nginx.conf:將宿主機的對應檔案對應到nginx的設定檔
nginx:執行的鏡像名稱
運行以上指令以後,會回傳隨機字串代表容器建立成功:
檢視運行中的容器:
沒有看到nginx001,肯定是運行的時候出錯了,我們來看一下錯誤訊息:
#大概意思是在設定檔中沒有找到events節點。因為我們建立的檔案內容是空的,所以啟動容器的時候直接把對應目錄下的nginx.conf給映射到nginx001裡面的nginx.conf了,空配置的nginx當然無法運作。
現在vi剛才本地創建好的nginx.conf,開始配置:
#之前我在docker上部署了一個簡易的.net core 程序,佔用本機連接埠1500 ,現在我把程式透過nginx反向代理到一個指定域名,並透過80埠存取。設定檔寫好以後,重啟容器nginx001:
#現在nginx001就成功啟動了,我們造訪剛才指定的網域:
#nginx的設定已經生效。
最後我們來嘗試docker重啟會不會導致配置初始化,重啟docker:
#啟動兩個容器:
存取頁面:
資料卷已經成功應用,因為重新啟動Docker後資料庫沒有被初始化。以後再也不怕docker宕機而資料遺失了。
nginx設定檔中的proxy_pass 屬性,非docker環境設定的時候,localhost或127.0.0.1是可以正常生效的,但是在docker下nginx容器設定localhost或127.0. 0.1時,有一個小坑導致無法完成實際的反向代理。因為容器運行時,docker會給它分配單獨的ip和端口,然後把docker佔用的ip映射到容器ip(例如docker下mysql啟動後,使用localhost可以登陸客戶端)。但nginx啟動時,會先讀取設定文件,設定正確的話才會運行,所以容器運行成功後,docker才把本地ip映射進去。只有當使用容器的 IP 直接存取時,如果設定檔中寫的是 localhost 或 127.0.0.1,則會觸發反向代理。在伺服器使用Docker設定Nginx時,只需輸入伺服器的IP位址即可完成設定。
以上是如何使用Docker掛載資料卷部署Nginx的詳細內容。更多資訊請關注PHP中文網其他相關文章!