docker安装php/nginx搭建本地开发环境

这里主要讲自己学习docker遇到的问题,一些基本的安装流程会跳过,由于本地已经有项目在开发,用laravel homestead方式运行,想试试docker方式。

电脑系统:windows

docker.hub官网下载windows版本客户端,再去Microsoft Store搜索ubuntu(看个人喜好)下载,之后打开ubuntu下载docker。

1.拉取php image,因为原项目要求php版本>=7.2.3,因此,docker pull php时需要指定版本,命令如下:

docker pull php:7.2.3-fpm

2.拉取nginx image,这个直接获取最新版本就好,命令如下:

docker pull nginx

3.创建php容器,命令

docker run --name php-fpm  -v /mnt/e/code:/usr/share/nginx/html -it --privileged=true -d php:7.2.3-fpm

其中

--name 是容器名称,这个可以根据自己喜好设定

-v 目录挂载,本地已有项目目录在ubuntu系统里的目录是/mnt/e/code,:/usr/share/nginx/html 这个是系统项目运行的目录,注意,这个目录要和待会创建nginx容器时nginx容器里的运行目录一致。

--privileged=true 让容器里的root用户真正拥有root权限

-d 后台运行模式

4.创建nginx容器,命令

docker run --name php-nginx -p 80:80 -it --privileged=true -d \
    -v /mnt/e/code:/usr/share/nginx/html:ro \
    -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
    --link php-fpm:php \
    nginx

--name 是容器名称,这个可以根据自己喜好设定

-p 端口映射,也可以8080:80这样,我是为了方便,直接宿主机的80端口对应ubuntu系统里的80端口

--privileged=true 让容器里的root用户真正拥有root权限

-d 后台运行模式

-v /mnt/e/code:/usr/share/nginx/html ubuntu系统里的/mnt/e/code挂载到nginx容器里的/usr/share/nginx/html目录

-v ~/nginx/conf/conf.d:/etc/nginx/conf.d ubuntu系统里的~/nginx/conf/conf.d目录挂载到nginx容器里的/etc/nginx/conf.d目录

--link php-fpm 使用3步骤创建的php容器,php-fpm是我自己起的容器名。

现在可以在docker客户端的左侧菜单栏里的Containers/Apps里看到两个运行的容器,进入~/nginx/conf/conf.d目录

vim test.conf

黏贴如下内容

server {
    listen       80;
    server_name  baidu.test;

    location / {
        root   /usr/share/nginx/html/public;
        index  index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php?s=$1 last;
    }

    location ~ \.php$ {
        root /usr/share/nginx/html/public;;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/public$fastcgi_script_name;
        include        fastcgi_params;
    }
}

重启nginx容器,浏览器输入baidu.test发现可以成功进入该项目,但是出现了报错,提示could not find driver。

因为项目连接的mysql不在本地,所以无需安装mysql容器,但是php需要安装php-mysql扩展,而官方镜像拉取下来是少了很多扩展的,需要自己自行安装。我这里解决办法如下

进入php容器,

cd /usr/local/bin

安装扩展

./docker-php-ext-install pdo_mysql
./docker-php-ext-install mysql
./docker-php-ext-install mysqli

同理,缺少其他扩展也可这样安装,例如

./docker-php-ext-install gd 
./docker-php-ext-install -j$(nproc) bcmath

其他扩展具体怎么安装,请点击这篇文章学习,Docker中PHP安装拓展汇总,连接:https://www.cnblogs.com/hcpzhe/p/12109081.html。

安装完毕后,正常来说我们需要去php.ini里修改配置,但是docker的php容器里没有这个文件,它的php.ini配置被分散到好多地方,那我们可以自己新建一个ini文件,里面写入我们要添加的配置。

cd /usr/local/etc/php/conf.d

这里我新建一个test.ini文件

vim test.ini

在里面添加如下内容

extension=mysqli
extension=pdo_mysql
extension=pdo_odbc
extension=openssl
extension=curl
extension=fileinfo
extension=gd
extension=pdo
extension=pdo_sqlite

这里面根据自己项目需要安装和添加就好,完毕后重启php容器,再次打开项目,正常运行。

 

posted @ 2021-11-24 11:26  骑着新浪狂奔  阅读(660)  评论(0编辑  收藏  举报