https://www.phpbloger.com/article/505.html
安裝docker,下載docker安裝即可。
安裝完成之后查看docker版本
顯示如下,表示安裝成功:
Docker version 20.10.5, build 55c4c88
- 創建目錄,用於存放我們的項目和nginx、php 文件或者路徑自己取。
這里我要着重的說明一下,有的PHP不帶php-fpm,與Nginx建立不了鏈接,通信不成功。比如 使用docker pull php 獲取到的是8.xx版本,就不帶fpm,這里一定要注意一下
在這里我覺得很有必要解釋一下幾個名詞的概念,不然很多時候就處於一個懵逼的狀態,不能深刻理解一些寫法的含義。
- 宿主機:也就是自己的電腦。
- 容器:我說得直白一點,容器就像是一台虛擬機(實際上不是,是隔離的2個進程),可以是centos\alpine\debian系統的,具體看鏡像。
- 掛載:宿主機要與容器保持同步文件,我們就需要掛載,在后面你看到的:-v xxxx:xxxx其實就是將宿主機的文件目錄對應到容器的某一個目錄。這個點極為的重要,不然大家很容易混淆概念。比如在本機的nginx.conf配置到底是配置宿主機還是容器的目錄總是搞不清。先理解這個后面一切都會變得簡單。
- 宿主機:也就是自己的電腦。
- 獲取Nginx鏡像,無需后面的版本表示獲取最新的版本;
- 獲取PHP鏡像
- 啟動Nginx
這里解釋下各個參數:
--name ,容器名稱。
-p 本地80端口映射到容器80端口
-v,可以有多個,而這里,第一個-v,是將宿主機的:~/mnmp/wwwroots掛載到容器的:/data/wwwroots,可以簡單理解共享文件,我們在本機的該增加一個文件,容器也就有了這個文件。
--privilge=true 使用該參數,container內的root擁有真正的root權限。
-it -i 選項指示 docker 要在容器上打開一個標准的輸入接口,-t 指示 docker 要創建一個偽 tty 終端,連接容器的標准輸入接口,之后用戶就可以通過終端進行輸入
第二個 -v, -v **~/mnmp/nginx/conf:/etc/nginx/conf.d**需要着重的說明一下;
大多數文檔和教程都是一點不帶提示的,直接叫你這樣寫,但是為什么要這樣寫?沒有一個說明白的。
/mnmp/nginx/conf 宿主機的地址,這個是自定義的,用於存放nginx的配置文件;
/etc/nginx/conf.d **是容器nginx加載配置的文件目錄,這個是容器規定的就在這個目錄,nginx運行會自動加載這個目錄下的配置。**
為什么要配置這一行,我們假設不配置這個,Nginx是不是就啟動不了?並不是,想想如果我們如果要增加一個web站點是不是需要配置域名和項目路徑,豈不是每次都要到容器上去修改?那不是很麻煩?我們配置之后只需要更改宿主機上的配置容器上就改了是不是很方便。
--privilge=true,-it
在前面有一篇文章說過,碰到過很多次容器啟動后一閃而逝就自動停止了加上它就能成功啟動了。
- 啟動PHP
上面參數經過我們對nginx參數的解釋估計大家都理解了,不用說明了。
-v ~/mnmp/php/conf:/usr/local/etc/php/conf.d 這里是/usr/local/etc/php/conf.d 就是拓展php.ini配置文件的地方,我們要增加PHP擴展或者其他參數就可以在宿主機~/mnmp/php/conf 修改。
- 查看PHP容器的IP
為什么要這個IP?上面說了,容器就像是虛擬機,PHP一個容器、nginx一個容器,2個被隔離的容器怎么通訊?第一個方法就是通過參數 --link建立相關的鏈接,第二個就是用上面的代碼獲取容器的IP進行通訊;我們在配置nginx的時候會用到。
- 2個容器都運行成功了,我們可以在docker可視化界面看到這2個容器
也可以使用:
- nginx建立配置文件,讓我們跑起來第一個項目。
我覺得root /data/wwwroots; 這里要着重的說明一下,這里配置的一定是容器的地址;
在上面我們運行容器的時候加了-v ~/mnmp/wwwroots:/data/wwwroots 這個參數;
我們只是通過掛載的方式將文件進行共享了,實際nginx 是在容器上執行,那么肯定就是填容器的地址了;
我相信很多朋友就配置錯了,而且沒有搞清楚到底配置宿主機還是配置容器的?傻傻分不清,看了這篇文章
還分不清就是我的問題。
- 編輯host 文件 加入:127.0.0.1 www.test.com
- /mnmp/wwwroots 目錄增加index.php 並寫入phpinfo()
- 看效果
- 這里我就不安裝mysql了,因為PHP程序不依賴mysql,我們隨便裝一個 運行起來就行。
總結:一定要分清楚宿主機和容器的關系,PHP、nginx 都是在容器上運行的,跟你本機沒有關系,本機就是做文件共享。
非特殊說明,本博所有文章均為博主原創。
如若轉載,請注明出處:https://www.phpbloger.com/article/505.html