目錄
原因
很多情況下,使用LNMP可以直接下載lnmp的容器,不過這些容器個頭都太大,基本有2G左右,如果想做個集羣測試,那是非常痛苦的,所以需要一個比較精簡,安裝方便的容器來實現Nginx+php-fpm,所以就有了本文墂的目標
初步安裝容器中的模塊
下載nginx鏡像
# docker pull nginx
# docker run --name 容器名稱 docker.io/nginx
安裝相關問題
Docker的Debian容器不支持漢字的問題
VIM配色方案
docker.io/nginx 修改apt源後提示Certificate verification failed: The certificate is NOT trusted
安裝php相關模塊
# apt-get install php php-fpm php-mysql
檢查一下php-fpm服務是否可以啓動
# service php7.3-fpm start
# service php7.3-fpm status
[ ok ] php-fpm7.3 is running.
從返回結果上看,php-fpm可以啓動了
使用一個相對複雜的辦法配置服務啓動
一個不好的現象
# service nginx stop
這時運行這個命令會導致容器關閉,對於需要調試程序,經常修改配置的情況下,使用非常不方便,下面介紹一個辦法來配置服務的啓動,雖然相對複雜,但是對於將來的工作來說不方便,檢查鏡像的配置
# docker image inspect docker.io/nginx
......
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"nginx\" \"-g\" \"daemon off;\"]"
],
......
注意到這一段,找到文章
docker運行nginx爲什麼要使用 daemon off,瞭解到是因爲容器是把nginx啓動爲PID=1的進程,所以nginx退出,容器便退出。
解決方案1
Docker(十七)-修改Docker容器啓動配置參數
這個方法在測試的時候需要頻繁啓動關閉docker服務,操作上非常不方便
解決方案2
把容器保存爲鏡像,通過修改鏡像腳本,來實現調整服務的目的,創建自己的鏡像,在鏡像腳本中設置php-fpm、nginx協同啓動
保存臨時鏡像
# docker commit 容器名稱 新鏡像文件名稱(mytmp1)
創建Dockerfile
# vi Dockerfile
FROM mytmp1
ENTRYPOINT service php7.3-fpm start && service nginx start && bash
創建工作鏡像
# docker build -t docker.io/nginx/mywork1 .
注意標點符號哦
用新的鏡像完成最後的配置工作
啓動鏡像
docker run \
-v /root/work:/root/work \
-v /var/www:/var/www \
--name myWork1 \
-p 80:80 \
-p 433:433 \
-dt docker.io/nginx/mywork1
適當給啓動的新容器添加端口,映射些主機目錄,方便容器將來的使用,避免把文件拷貝來拷貝去的
檢查服務啓動狀態
# service nginx status
[ ok ] nginx is running.
# service php7.3-fpm status
[ ok ] php-fpm7.3 is running.
從這裏看,服務啓動正常了
修改php-fpm配置文件
# vi /etc/php/7.3/fpm/pool.d/www.conf
listen = /run/php/php7.3-fpm.sock
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
本文只關注這些項,其他項的值請保留哦,這裏的要點:nginx的權限與php-fpm啓動的權限一致時,才能正確連接
修改nginx配置
# vi /etc/nginx/conf.d/default.conf
location ~ \.php$ {
root /var/www/html;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
要注意檢查端口號和網站的根目錄,最好與php的根目錄一致
listen 80;
location / {
root /var/www/html;
index index.html index.htm;
}
做測試文件檢查php
# vi /var/www/html/info.php
<?php
phpinfo();
用瀏覽器查看,頁面返回錯誤信息
由此可見,nginx並未正確連接上php-fpm
檢查錯誤並處理
## ls -l /var/log/nginx/
total 0
lrwxrwxrwx 1 root root 11 May 15 20:15 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 May 15 20:15 error.log -> /dev/stderr
錯誤信息是輸出到輸出設備的,那如何查看呢?這時要返回主機
查看錯誤信息
# docker logs myWork1 --tail 20
173.154.216.1, server: localhost, request: "GET /i.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.3-fpm.sock:", host: "173.154.216.147"
173.154.216.1 - - [19/May/2020:14:04:49 +0000] "GET /i.php HTTP/1.1" 502 494 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0" "-"
處理錯誤
每個人的情況都不一樣,根據錯誤信息就可以去處理錯誤了,順利的話,PHP就正常運行了