如何使用Docker掛載資料卷部署Nginx

nginx資料卷

nginx的作用有很多,比如正向代理、反向代理、負載均衡、透明代理等,一般情況下使用較多的是反向代理和負載均衡。我們只需要在本地同步配置文件,就能完成這些操作。要創建nginx的配置文件,首先需要在/etc/nginx/目錄下新建一個名為nginx.conf的文件

如何使用Docker掛載資料卷部署Nginx

nginx1目錄下的nginx.conf也要創建,內容空著就行。接下來查看鏡像是否正常:

如何使用Docker掛載資料卷部署Nginx

如果還沒有下載鏡像,使用以下命令拉取鏡像(默認最新版):

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:運行的鏡像名稱

運行以上命令以后,會返回隨機字符串代表容器創建成功:

如何使用Docker掛載資料卷部署Nginx

查看運行中的容器:

如何使用Docker掛載資料卷部署Nginx

沒有看到nginx001,肯定是運行的時候出錯了,我們來看一下錯誤信息:

如何使用Docker掛載資料卷部署Nginx

大概意思是配置文件中沒有找到events節點。因為我們創建的文件內容是空的,所以啟動容器的時候直接把對應目錄下的nginx.conf給映射到nginx001里面的nginx.conf了,空配置的nginx當然無法運行。

現在vi剛才本地創建好的nginx.conf,開始配置:

如何使用Docker掛載資料卷部署Nginx

之前我在docker上部署了一個簡易的 .net core 程序,占用本地端口 1500 ,現在我把程序通過nginx反向代理到一個指定域名,并通過80端口訪問。配置文件寫好以后,重啟容器nginx001:

如何使用Docker掛載資料卷部署Nginx

現在nginx001就成功啟動了,我們訪問一下剛才指定的域名:

如何使用Docker掛載資料卷部署Nginx

nginx的配置已經生效。

最后我們來嘗試一下docker重啟會不會導致配置初始化,重啟docker:

如何使用Docker掛載資料卷部署Nginx

啟動兩個容器:

如何使用Docker掛載資料卷部署Nginx

訪問頁面:

如何使用Docker掛載資料卷部署Nginx

資料卷已經成功應用,因為重啟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地址即可完成配置。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享