淘先锋技术网

首页 1 2 3 4 5 6 7

1. docker安装php

1.1 安装php镜像

1.1.1 docker pull php

查找Docker Hub上的php镜像
在这里插入图片描述
这里我们拉取官方的镜像,标签为7.3-fpm

docker pull php:7.3-fpm

等待下载完成后,我们就可以在本地镜像列表里查到REPOSITORY为php,标签为7.3-fpm的镜像。在这里插入图片描述

1.2 php部署

启动 PHP:(如果没有相应路径 需要先创建 mkdir -p /mnt/wwwroot)

docker run --name  myphp-fpm -v /mnt/wwwroot:/www  -d php:7.3-fpm
eg: 安装完扩展后 挂载目录
docker run --name  myphp-fpm -v /mnt/wwwroot:/www -v /mnt/php/conf:/usr/local/etc/php  -d zjc348/php:v1.0

安装扩展 参考 安装yaf 一文
命令说明:

–name myphp-fpm : 将容器命名为 myphp-fpm。
-v /mnt/wwwroot:/www : 将主机中项目的目录 wwwroot挂载到容器的 /www
安装pdo_pgsql 扩展

pecl install pdo_mysql mysqli mysql gd

直接用pecl install pdo_pgsql 失败

确保已安装的依赖:
apt-get update && apt-get install -y libpq-dev
配置扩展:
docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql
安装扩展:
docker-php-ext-install pdo pdo_pgsql

2. docker安装nginx

2.1 安装nginx镜像

2.1.1 docker pull nginx

查找 Docker Hub 上的 nginx 镜像
在这里插入图片描述
这里我们拉取官方的镜像

docker pull nginx

等待下载完成后,我们就可以在本地镜像列表里查到 REPOSITORY 为 nginx 的镜像。
在这里插入图片描述

2.2 nginx 部署

首先,创建目录, 用于存放后面的相关东西。

mkdir -p /mnt/wwwroot /mnt/nginx/logs /mnt/nginx/conf /mnt/nginx/conf/conf.d

如已创建wwwroot目录则使用以下命令:

mkdir -p /mnt/nginx/logs /mnt/conf /mnt/nginx/conf/conf.d

拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以查看 docker ps 命令输入中的第一列:

拷贝文件:
docker cp 主机文件路径 容器ID或容器名:容器路径 # 主机中文件拷贝到容器中
docker cp 容器ID或容器名:容器路径 主机文件路径 # 容器中文件拷贝到主机中

docker cp 6dd4380ba708:/etc/nginx/nginx.conf /mnt/nginx/conf

wwwroot: 目录将映射为 nginx 容器配置的虚拟目录。
logs: 目录将映射为 nginx 容器的日志目录。
conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
conf.d: 目录里的配置文件将映射为 nginx 容器的配置文件。

在 conf.d 目录下添加 /mnt/nginx/conf/conf.d/phpinfo.conf 文件,内容如下:

server {
    listen       80;
    server_name  api.yaf_test.com;
    root   /usr/share/nginx/html/yaf_test/html;
    index  index.html index.htm index.php;


    location / {
        try_files $uri $uri/ /index.php?_url=$uri&$args;
    }

    #你会经常在日志中看到找不到Favicon.ico.php找不到的500报错
    location = /favicon.ico {
        access_log off;
        error_log off;
        log_not_found off;
    }

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


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


    location ~ \.php$ {
        #default_type text/plain;
        #return 502 "$document_root  $fastcgi_script_name";
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/yaf_test/html/$fastcgi_script_name;
        include        fastcgi_params;
    }


    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
        expires 30d;
        access_log off;
    }
    location ~ .*\.(js|css)?$ {
        expires 7d;
        access_log off;
    }
    location ~ /\.ht {
        deny all;
    }
}

配置文件说明:

php:9000: 表示 php-fpm 服务的 URL,下面我们会具体说明。
/www/: 是 myphp-fpm 中 php 文件的存储路径,映射到本地的 /mnt/wwwroot 目录。

启动 nginx:

docker run --name myweb-nginx-php -p 80:80 -d -v /mnt/wwwroot:/usr/share/nginx/html -v /mnt/nginx/conf/conf.d:/etc/nginx/conf.d -v /mnt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /mnt/nginx/logs:/var/log/nginx --link myphp-fpm:php nginx

或者:
//查看php容器IP
docker inspect 容器ID或容器名 |grep '"IPAddress"'
//编辑nginx配置
vi /nginx/conf/conf.d/default.conf:
在这里插入图片描述

-p 8080:80: 将容器的 80 端口映射到主机的 8080 端口。

–name myweb-nginx-php:将容器命名为 myweb-nginx-php。

-d 设置容器在在后台一直运行。

-v /mnt/wwwroot:/usr/share/nginx/html:将我们自己创建的 wwwroot 目录挂载到容器的 /usr/share/nginx/html。

-v /mnt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将我们自己创建的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf。

-v /mnt/nginx/logs:/var/log/nginx:将我们自己创建的 logs 挂载到容器的 /var/log/nginx。

-v /mnt/nginx/conf/conf.d:/etc/nginx/conf.d: 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是容器内 nginx 配置文件的存储目录。

–link myphp-fpm:php: 把 myphp-fpm 的网络并入 nginx,并通过修改 nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。

接下来我们在 /mnt/wwwroot 目录下创建 phpinfo.php,代码如下:

<?php
echo phpinfo();
?>

浏览器打开 192.168.147.246:8080/phpinfo.php,显示如下:

在这里插入图片描述