PHP环境容器化部署是将PHP运行所需的运行时、依赖库、配置文件等打包到容器中,实现环境标准化和快速迁移的部署方式,能够避免不同机器上环境差异导致的应用运行异常问题。

一、前期环境准备
首先需要确保部署机器已经安装Docker和Docker Compose,这是容器化部署的基础工具。如果是Linux系统,可以通过系统包管理器安装,以Ubuntu为例,安装命令如下:
# 更新软件包索引 sudo apt-get update # 安装Docker依赖 sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 添加Docker软件源 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 安装Docker sudo apt-get install -y docker-ce # 安装Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose # 验证安装结果 docker --version docker-compose --version
二、编写Docker Compose配置文件
我们通过Docker Compose来编排PHP、Nginx、MySQL三个核心服务,实现多容器联动。在项目根目录创建docker-compose.yml文件,内容如下:
version: '3.8'
services:
# PHP服务
php:
image: php:8.2-fpm
container_name: php-fpm
volumes:
- ./app:/var/www/html
- ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
networks:
- php-net
# Nginx服务
nginx:
image: nginx:1.25
container_name: nginx
ports:
- "80:80"
volumes:
- ./app:/var/www/html
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- php
networks:
- php-net
# MySQL服务
mysql:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: php_db
MYSQL_USER: php_user
MYSQL_PASSWORD: user123456
volumes:
- ./mysql/data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- php-net
networks:
php-net:
driver: bridge三、配置各服务相关文件
1. PHP配置文件
在./php目录下创建php.ini文件,自定义PHP运行参数,示例内容如下:
[PHP] date.timezone = Asia/Shanghai upload_max_filesize = 20M post_max_size = 20M memory_limit = 256M
2. Nginx站点配置
在./nginx/conf.d目录下创建default.conf文件,配置Nginx转发PHP请求,内容如下:
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}3. 测试PHP文件
在./app目录下创建index.php测试文件,验证环境是否正常工作:
<?php
// 测试PHP运行
echo "<h1>PHP环境容器化部署成功</h1>";
echo "当前PHP版本:" . phpversion() . "<br/>";
// 测试MySQL连接
$mysqli = new mysqli('mysql', 'php_user', 'user123456', 'php_db');
if ($mysqli->connect_error) {
die("MySQL连接失败:" . $mysqli->connect_error);
}
echo "MySQL连接成功";
$mysqli->close();
?>四、启动并验证部署结果
在docker-compose.yml所在目录执行启动命令,启动所有容器:
# 后台启动所有服务 docker-compose up -d # 查看容器运行状态 docker-compose ps
如果所有容器状态都是Up,打开浏览器访问http://127.0.0.1,如果页面显示PHP版本信息和MySQL连接成功提示,说明PHP环境容器化部署完成。
五、常用运维操作
- 停止所有容器:
docker-compose stop - 重启所有容器:
docker-compose restart - 查看PHP容器日志:
docker-compose logs php - 进入PHP容器内部:
docker-compose exec php bash - 停止并删除所有容器:
docker-compose down