1. 下載docker Desktop 使用最新版
2. 下載php 7.2
docker pull arodax/php7.2-fpm
啟動php-fpm
docker run --name php-fpm -p 9000:9000 -v /var/data/php/conf:/usr/local/etc/php/conf.d -v /var/data:/data/wwwroots -it -d arodax/php7.2-fpm
3. 下載nginx
docker pull nginx
啟動Nginx鏡像
docker run --name nginx -p 80:80 -v /var/data/:/data/wwwroots -v /var/data/nginx/conf:/etc/nginx/conf.d -it -d nginx

image.png
查看容器是否啟動

image.png
容器啟動成功
在瀏覽器打看試試
結(jié)果顯示錯誤

這是什么問題??
開始排錯
3.1 進入容器看看掛載是否成功
docker exec -it 2ca2b1fecbbd /bin/bash
ls /data/wwwroots/

image.png
文件掛載成功
3.2 第一個考慮是沒有配置文件
設(shè)置一個配置文件
server {
listen 80;
server_name local.com;
root /data/wwwroots;
location / {
index index.html index.htm index.php;
}
location ~ \.php(.*)$ {
fastcgi_pass 172.17.0.2:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
文件存儲在宿主機的位置
nginx掛載文件設(shè)置 /var/data/nginx/conf:/etc/nginx/conf.d
/var/data/nginx/conf
查看nginx容器是否成功掛載配置文件
Liangrongze2019:Downloads h$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b44f7d6beef nginx "/docker-entrypoint.…" 9 seconds ago Up 8 seconds 0.0.0.0:80->80/tcp nginx
0b7b440225fd binhle410/php7.2-fpm:latest "docker-php-entrypoi…" 11 hours ago Up 11 hours 9000/tcp gracious_darwin
Liangrongze2019:Downloads h$ docker exec -it 4b44f7d6beef /bin/bash
root@4b44f7d6beef:/# ls /etc/nginx/conf.d/
root@4b44f7d6beef:/# ls /etc/nginx/conf.d/
local.conf st.conf
成功掛載文件
預(yù)覽測試html

image.png
預(yù)覽測試php

image.png
無法解釋php文件,配置文件還需要修改。應(yīng)該是php fpm地址錯誤。
先找到php-fpm的ip地址
Liangrongze2019:Downloads h$ docker inspect --format='{{.NetworkSettings.IPAddress}}' php-fpm
172.17.0.2
修改nginx的配置文件
fastcgi_pass 172.17.0.2:9000;

image.png
測試成功!
4. 安裝PHP拓展
4.1 查看有沒有ext目錄
Liangrongze2019:Downloads h$ docker exec -it 53a96c2da8c8 /bin/bash
root@53a96c2da8c8:/var/www/html# cd /usr/src/
root@53a96c2da8c8:/usr/src# ls
php php.tar.xz php.tar.xz.asc
root@53a96c2da8c8:/usr/src# cd php
root@53a96c2da8c8:/usr/src/php# ls
CODING_STANDARDS Makefile.global README.RELEASE_PROCESS README.input_filter appveyor ext makedist run-tests.php travis
CONTRIBUTING.md NEWS README.SELF-CONTAINED-EXTENSIONS README.md build footer missing sapi vcsclean
CREDITS README.EXT_SKEL README.STREAMS TSRM buildconf generated_lists mkinstalldirs scripts win32
EXTENSIONS README.GIT-RULES README.SUBMITTING_PATCH UPGRADING buildconf.bat genfiles pear server-tests-config.php
INSTALL README.MAILINGLIST_RULES README.TESTING UPGRADING.INTERNALS config.guess header php.gif server-tests.php
LICENSE README.NEW-OUTPUT-API README.TESTING2 Zend config.sub install-sh php.ini-development snapshot
Makefile.frag README.PARAMETER_PARSING_API README.UNIX-BUILD-SYSTEM acinclude.m4 configure ltmain.sh php.ini-production stamp-h.in
Makefile.gcov README.REDIST.BINS README.WIN32-BUILD-SYSTEM aclocal.m4 configure.ac main php7.spec.in tests
如果沒有,就需要創(chuàng)建
docker-php-source extract
如果ext目錄已經(jīng)存在需要安裝擴展的源碼,就直接安裝
docker-php-ext-install gd
如果ext目錄沒有擴展源碼,就需要使用另外一種方式安裝。
以安裝mcrypt為例
// redis 源碼 http://pecl.php.net/get/redis-4.0.2.tgz
root@53a96c2da8c8:/usr/src/php/ext# cd /tmp/
root@53a96c2da8c8:/tmp# wget http://pecl.php.net/get/mcrypt-1.0.1.tgz
--2022-04-18 03:19:08-- http://pecl.php.net/get/mcrypt-1.0.1.tgz
Resolving pecl.php.net (pecl.php.net)... 104.236.228.160
Connecting to pecl.php.net (pecl.php.net)|104.236.228.160|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 33782 (33K) [application/octet-stream]
Saving to: 'mcrypt-1.0.1.tgz'
mcrypt-1.0.1.tgz 100%[================================================================================================================>] 32.99K 29.8KB/s in 1.1s
2022-04-18 03:19:11 (29.8 KB/s) - 'mcrypt-1.0.1.tgz' saved [33782/33782]
root@53a96c2da8c8:/tmp# ls
mcrypt-1.0.1.tgz pear
root@53a96c2da8c8:/tmp# tar -zxf mcrypt-1.0.1.tgz
root@53a96c2da8c8:/tmp# ls
mcrypt-1.0.1 mcrypt-1.0.1.tgz package.xml pear
root@53a96c2da8c8:/tmp# mv mcrypt-1.0.1 /usr/src/php/ext/
root@53a96c2da8c8:/tmp# ls
mcrypt-1.0.1.tgz package.xml pear
root@53a96c2da8c8:/tmp# mv /usr/src/php/ext/mcrypt-1.0.1/ /usr/src/php/ext/mcrypt
root@53a96c2da8c8:/tmp# docker-php-ext-install mcrypt
root@53a96c2da8c8:/tmp# php -m | grep mcrypt
mcrypt
重啟php-fpm容器,就可以在web服務(wù)器查看已經(jīng)加載。

image.png

image.png