Mac 使用docker搭建PHP环境

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

容器启动成功

在浏览器打看试试

结果显示错误

这是什么问题??

开始排错

3.1 进入容器看看挂载是否成功

 docker exec -it 2ca2b1fecbbd  /bin/bash
ls /data/wwwroots/
image.png

文件挂载成功

3.2 第一个考虑是没有配置文件
设置一个配置文件

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挂载文件设置 /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

成功挂载文件

预览测试html

image.png

预览测试php

image.png

无法解释php文件,配置文件还需要修改。应该是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

如果没有,就需要创建

docker-php-source extract

如果ext目录已经存在需要安装扩展的源码,就直接安装

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服务器查看已经加载。

image.png
image.png

你可能感兴趣的:(Mac 使用docker搭建PHP环境)