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,显示如下: