Ubuntu PHP如何实现容器化部署
在Ubuntu上通过Docker容器化部署PHP应用,需依次安装Docker、编写Dockerfile配置PHP环境及必要扩展、构建镜像、运行容器,并可配置Nginx反向代理和数据卷实现持久化,最终验证应用运行。整个过程实现环境隔离、便捷迁移并保证环境一致性。
在Ubuntu上借助Docker把PHP应用容器化,整个过程其实并不复杂,只要理清几个关键步骤,你也能快速上手。下面就把这套流程拆开来聊聊。

1. 安装Docker
先确认你的Ubuntu系统里有没有装好Docker。如果还没装,不用慌,直接敲下面两行命令就能搞定:
sudo apt update
sudo apt install docker.io
2. 创建Dockerfile
进入PHP项目根目录,新建一个名叫 Dockerfile 的文件——这个文件就是整个镜像的“配方”,决定了你的PHP环境长什么样。下面是一个比较典型的配置:
# 使用官方的PHP基础镜像
FROM php:7.4-fpm
# 安装必要的扩展
RUN apt-get update && apt-get install -y \
libpng-dev libjpeg62-turbo-dev libpq-dev libzip-dev zip \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd pdo_mysql zip opcache
# 设置工作目录
WORKDIR /var/www/html
# 复制项目文件到容器中
COPY . /var/www/html
# 安装Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 设置权限
RUN chown -R www-data:www-data /var/www/html
# 暴露端口
EXPOSE 9000
# 启动PHP-FPM服务
CMD ["php-fpm"]
这里用到了PHP 7.4的FPM镜像,同时安装了GD、PDO_MySQL、ZIP等常用扩展,并且顺带把Composer也装上了。你可以根据项目实际需求增减扩展。
3. 构建Docker镜像
在项目根目录下运行下面这个命令,Docker就会按照刚才写的配方一步步构建出镜像:
docker build -t my-php-app .
镜像名(my-php-app)可以自己改,但记得后面启动容器时要用同一个名字。
4. 运行Docker容器
镜像构建完成后,直接启动一个容器:
docker run -d -p 9000:9000 --name my-php-container my-php-app
这个命令会把主机的9000端口映射到容器的9000端口,容器名就叫 my-php-container。启动后,PHP-FPM就在后台跑起来了。
5. 配置Nginx(可选)
如果你的应用需要处理HTTP请求,通常会在前面加一个Nginx反向袋里。下面是一步一步怎么配:
安装Nginx
sudo apt install nginx
配置Nginx
编辑默认站点配置文件(一般路径是 /etc/nginx/sites-a vailable/default),加入类似下面这样的内容:
server {
listen 80;
server_name your_domain_or_ip;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
注意这里 fastcgi_pass 指向的是主机上的PHP-FPM socket,如果你想用容器内的PHP-FPM,则需要改成 fastcgi_pass 127.0.0.1:9000;,并确保容器端口映射正确。
重启Nginx
sudo systemctl restart nginx
6. 验证部署
最后一步,打开浏览器,输入服务器的IP地址或域名,如果一切顺利,你的PHP应用应该已经正常显示了。整个流程走下来,你会发现Docker的容器化部署其实比想象中要清爽——环境隔离、依赖明确,迁移和扩展都方便得多。


































