悠悠楠杉
php网站docker容器化部署与运行方法详解
在当前的Web开发环境中,容器化技术已成为提升部署效率、保障环境一致性的重要手段。对于使用PHP语言开发的网站系统而言,借助Docker进行容器化部署,不仅可以避免“在我机器上能跑”的尴尬问题,还能实现快速扩展和持续集成。本文将从零开始,详细介绍如何将一个典型的PHP网站(如基于Laravel或原生PHP的项目)部署到Docker容器中,并通过Nginx、PHP-FPM和MySQL组成完整的运行环境。
首先,我们需要在服务器或本地开发机上安装Docker和Docker Compose。大多数Linux发行版可通过包管理器直接安装,例如Ubuntu系统可执行sudo apt install docker.io docker-compose。安装完成后,建议将当前用户加入docker组以避免每次使用sudo。
接下来是项目结构的组织。假设我们的PHP网站位于/var/www/html/myphpsite目录下,我们在此目录创建docker-compose.yml文件,用于定义多容器应用的服务编排。该文件通常包含三个核心服务:Web服务器(Nginx)、PHP处理服务(PHP-FPM)和数据库(MySQL)。
在docker-compose.yml中,我们这样定义服务:
yaml
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./src:/var/www/html
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- php
networks:
- app-network
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./src:/var/www/html
environment:
- DBHOST=mysql
- DBUSER=root
- DB_PASS=123456
networks:
- app-network
mysql:
image: mysql:5.7
environment:
MYSQLROOTPASSWORD: 123456
MYSQL_DATABASE: myphpdb
volumes:
- mysql-data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- app-network
volumes:
mysql-data:
networks:
app-network:
driver: bridge
其中,src目录存放PHP源码,Dockerfile用于构建自定义PHP镜像。一个典型的Dockerfile内容如下:
dockerfile
FROM php:8.1-fpm-alpine
RUN apk update && apk add \
nginx \
mysql-client \
zip \
unzip \
&& docker-php-ext-install mysqli pdo pdo_mysql
COPY php.ini /usr/local/etc/php/
WORKDIR /var/www/html
CMD ["php-fpm"]
这个Dockerfile基于Alpine Linux构建,轻量高效,并安装了PHP常用扩展,确保大多数PHP应用可以正常运行。同时,我们将自定义的php.ini配置文件复制进去,便于调整内存限制、上传大小等参数。
Nginx的配置文件nginx.conf需要正确指向PHP-FPM的Unix socket或TCP地址。由于我们在不同容器中运行,这里使用TCP方式通信。配置示例如下:
nginx
events {
worker_connections 1024;
}
http {
server {
listen 80;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
注意fastcgi_pass php:9000;中的php对应的是服务名称,Docker Compose会自动建立内部DNS解析。
一切准备就绪后,在项目根目录执行docker-compose up --build,Docker将依次构建镜像、启动容器并建立网络连接。首次运行可能需要几分钟下载基础镜像和安装依赖。当看到所有服务状态为“running”时,访问http://localhost即可看到PHP网站的首页。
若网站涉及数据库操作,还需在PHP代码中使用环境变量配置数据库连接,如getenv('DB_HOST')获取MySQL地址,确保与容器环境一致。
通过这种容器化部署方式,PHP网站具备了高度可移植性和环境隔离性。无论是开发、测试还是生产环境,只需一套配置即可快速部署,极大提升了运维效率。同时,结合CI/CD工具,还可实现自动化构建与发布,真正迈向现代化Web应用架构。
