docker搭建php部署环境
- nginx 作为代理服务器
- php php脚本解析引擎
- mysql 不包含在此,可以看单独的文章
- redis 不包含在此,可以看单独的文章
先搞一个nginx+php
先拷贝一份nginx的配置文件出来先
# 拉取镜像
docker pull nginx:1.21.6
# 创建容器
docker run --name temp-nginx nginx:1.21.6
# 复制里面的配置文件出来
docker copy temp-nginx:/etc/nginx ./
docker stop temp-nginx
docker rm temp-nginx
php也是,复制一份配置文件出来
# 拉取镜像
docker pull php:7.4.28-fpm
# 创建容器
docker run --name temp-php php:7.4.28-fpm
# 复制里面的配置文件出来
docker copy temp-php:/usr/local/etc/php ./
docker stop temp-php
docker rm temp-php
docker-compoase.yaml
version: "3"
services:
nginx:
image: nginx:1.21.6
container_name: "php-nginx"
restart: always
ports:
- "1180:1180"
- "1181:1181"
depends_on:
- "php"
volumes:
- "./nginx:/etc/nginx"
- "./log:/usr/share/nginx/logs"
- "./www:/usr/share/nginx/html"
networks:
- php-app
php:
image: php:7.4.28-fpm
container_name: "php7.4.28-fpm"
restart: always
ports:
- "9000:9000"
volumes:
- "./www:/usr/share/nginx/html"
- "./php:/usr/local/etc/php"
networks:
- php-app
networks:
php-app:
注意nginx的端口,那两个对应着我配置里的端口。
你也可以用默认80
以上内容,我的网络是同一个,可以相互访问,我使用容器的名称就可以进行访问,注意我的php的名字是php7.4.28-fpm
从主面复制出来的nginx配置文件,默认的如下:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
可以看得出来,包含了/etc/nginx/conf.d目录下所有*conf文件
也就是我们可以独立配置很多的.conf 配置文件。
通常按我的习惯,我会按 域名进行配置
下面我们看其中有Php的配置:
server {
listen 1181;
server_name localhost;
access_log /usr/share/nginx/logs/nginx_1181.log combined;
#error_page 404 /404.html;
#error_page 502 /502.html;
location / {
index index.html index.htm index.php;
root /usr/share/nginx/html/lclook/public/;
}
location ~ \.php$ {
fastcgi_pass php7.4.28-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/lclook/public$fastcgi_script_name;
include fastcgi_params;
}
}
从配置可以看出,如果是非php的文件直接访问,而php结尾的文件,则通过访问php7.4.28-fpm:9000;
也就是php的访问则给到php解析器进行处理。
测试
在/usr/share/nginx/html/lclook/public
目录下创建
phpInfo.php文件
内容如下:
<?php phpInfo(); ?>
然后保存,访问一下,结果如下图:
到这里,php的环境是有的了。
php库扩展库的安装
在配置里把扩展打开,比如说mysql,redis你所需要的扩展
php.ini-devement配置文件,复制一份成php.ini
把需要的打开
然后安装相关的库
进入到容器里
docker exec -it php7.4.28-fpm /bin/bash
然后安装相关的库
docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql
安装完以后重启一下容器
docker restart php7.4.28-fpm
再次访问前面那个phpInfo.php的连接
就会看到支持mysql的了
但是这种方式,通过docker-compose down以后,就没有了。
那怎么办呢?
可以自己构建一个镜像,加上
FROM php:7.4.28-fpm
RUN docker-php-ext-install mysqli pdo pdo_mysql && docker-php-ext-enable pdo_mysql
okay,今天 的文章就水到这里吧,明天看看写点啥。