Docker下安裝Nginx和php(爬坑篇)

寞小陌發表於2022-07-12

本文的主要目的是為了記錄爬坑,方便日後查詢,所以步驟相對簡略

預設認為已經安裝好了docker,安裝也比較簡單,沒啥坑。

一、Docker 安裝 Nginx

1.首先去docke市場搜尋nginx

docker search nginx 

大概會看到以下內容,當然這些都不重要。
Docker下安裝Nginx和php(爬坑篇)
2.拉取最新nginx映象

docker pull nginx:latest

3.拉去完畢後,我們建立nginx容器這個是草稿,後續要刪掉的(因為要去複製一些預設配置檔案,如果有可省略)

docker run --name nginx -p 8080:80 -v /docker/www:/www -d nginx 
  • –name nginx 表示容器的名稱叫做nginx
  • -p 8080:80 表示“本機的8080” 埠對映到“容器的80”埠
  • -v /docker/www:/www 表示“本機/docker/www”目錄對映到“容器www”目錄
  • -d nginx 設定容器在後臺持續執行

4.檢視容器啟動情況

docker ps

Docker下安裝Nginx和php(爬坑篇)

5.然後訪問本地的8080埠應該就可以看到大致如下(網圖)

Docker下安裝Nginx和php(爬坑篇)
6.接下來建立幾個目錄(很重要!!!)
比如 /usr/local/docker/nginx/www/html/ 用於存放專案
/usr/local/docker/nginx/conf/ 用於存放配置檔案
/usr/local/docker/nginx/logs/ 用於存放日誌
7.將容器內的配置檔案複製到本機

docker cp nginx:/etc/nginx/conf.d/default.conf /usr/local/docker/ngxin/conf.d/default.conf
docker cp nginx:/etc/nginx/conf.d/nginx.conf /usr/local/docker/ngxin/nginx.conf

好了,這個草稿nginx容器的利用價值就沒了,刪了

docker stop nginx #停止nginx容器
docker rm nginx #移除nginx容器

8.配置正式用的nginx容器

docker run --name nginx -p 80:80 -v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/docker/nginx/conf.d:/etc/nginx/conf.d -v /usr/local/docker/nginx/logs:/var/nginx/logs -v /usr/local/docker/ngin/html:/usr/share/ngxin/html -d nginx

⚠️注意 -v /usr/local/docker/ngin/html:/usr/share/ngxin/html 這個對映圈起來,等會要考!!!

二、Docker安裝php

1.象徵性的查詢一下php

docker search php

Docker下安裝Nginx和php(爬坑篇)
2.拉去php官方映象 我選的的7.3

docker pull php:7.3-fpm

3.然後啟動一個草稿php(因為也要去複製一些預設配置檔案,如果有可省略)

docker run --name php-test -p 9000:9000 -d php:7.3-fpm

4.建立存放php配置檔案和日誌的目錄
/usr/local/docker/php73/conf
/usr/local/docker/usr/local/docker/php73/logs
5.複製容器內的預設配置檔案

docker cp php-test:/usr/local/etc/php/php.ini-production php/conf.d/php.ini #我只複製了這一份

如果需要複製更多的檔案可以進入容器內,檢視有哪些檔案需要複製的

docker exec -it php-test bash #進入php容器內
docker exec -it nginx bash #進入nginx容器內

6.刪除php-test容器,不刪留著也沒問題

docker stop php-test
docker rm php-test

7.建立php正式使用的容器

docker run -p 9000:9000 --name  php -v /usr/local/docker/php73/conf:/usr/local/etc/php -v /usr/local/docker/php73/logs:/phplogs  -v /usr/local/docker/nginx/html:/usr/share/nginx/html  -d php:7.3-fpm 

⚠️⚠️這個引數 -v /usr/local/docker/nginx/html:/usr/share/nginx/html 一定要和上面圈起來的重點相一致!!!不然會報File Not Found 錯誤❌
然後就大功告成啦!

三、坑

最大的坑就是上面的File Not Found!明明訪問index.html好好的,就是訪問不了index.php.比較難排查的問題意見在上面了。
還有就是可能檔案讀寫的許可權問題,我暫時沒遇到
還有一個就是php預設訪問的ip不再是127.0.0.1:9000了!!!

 docker inspect php 

找到這個IPAddress的值,填入nginx的配置配件default.conf
Docker下安裝Nginx和php(爬坑篇)
⚠️關鍵配置

 location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   172.17.0.3:9000;#這裡的值改成之前查到的
        #fastcgi_pass   php:9000;#或者容器名:9000 我好像沒成功 評論區大神說,應該確實是沒配置網路組的問題
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;#這裡用絕對路徑
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;#或者用$document_root變數
        fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
        include        fastcgi_params;
    }

然後重啟nginx

docker restart nginx

docker檢視錯誤日誌

docker ps -a #檢視所有容器
docker logs id #id是CONTAINER ID 

後續遇到坑再補充吧

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章