如何使用Docker运行PHP文件?
                           
天天向上
发布: 2025-06-28 13:03:01

原创
853 人浏览过

使用 Docker 运行 PHP 文件是开发和部署现代 PHP 应用的常见方式。你可以在几分钟内构建一个隔离、可移植、跨平台的 PHP 环境,避免 “在我电脑上可以运行” 的问题。


一、基本目标

  • 在 Docker 容器中运行一个 PHP 文件(例如 index.php
  • 可选地添加 Web 服务器(如 Apache 或 Nginx)
  • 可选地绑定本地端口用于浏览器访问

二、方法一:直接用 CLI 模式运行 PHP 脚本

适合快速运行 PHP 脚本(非网页)

文件结构示例

my-php-app/
├── script.php

script.php 示例内容

<?php
echo "Hello from Docker!\n";

运行命令(无需 Dockerfile)

docker run --rm -v "$PWD":/app -w /app php:8.2-cli php script.php

解释:

  • php:8.2-cli:使用官方 PHP CLI 镜像
  • -v "$PWD":/app:把当前目录挂载到容器的 /app
  • -w /app:设置工作目录
  • php script.php:运行该 PHP 文件

三、方法二:运行 PHP Web 应用(内建服务器)

适合开发测试网页应用

示例项目结构

my-php-site/
├── index.php
<!-- index.php -->
<?php
echo "Hello from PHP built-in server!";

启动命令(使用 PHP 内建 Web 服务器)

docker run --rm -p 8080:80 -v "$PWD":/var/www/html php:8.2-cli php -S 0.0.0.0:80 -t /var/www/html

然后打开浏览器访问:
http://localhost:8080


四、方法三:使用 Dockerfile 构建自定义 PHP 容器

适合长期项目部署或需要扩展组件

项目结构

php-docker-app/
├── Dockerfile
├── index.php

Dockerfile 示例

FROM php:8.2-apache

# 可选:启用 rewrite、pdo 等模块
RUN docker-php-ext-install pdo pdo_mysql

# 将本地代码复制到容器中
COPY . /var/www/html/

index.php 示例

<?php
phpinfo();

构建并运行容器

docker build -t my-php-app .
docker run -d -p 8080:80 my-php-app

打开浏览器访问:

http://localhost:8080


五、使用 docker-compose 管理 PHP + MySQL 环境(可选进阶)

适合完整开发环境部署

文件结构

php-compose-app/
├── docker-compose.yml
├── index.php

docker-compose.yml 示例

version: '3'
services:
  php:
    image: php:8.2-apache
    ports:
      - "8080:80"
    volumes:
      - .:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb

index.php 示例(带 MySQL)

<?php
$pdo = new PDO("mysql:host=db;dbname=testdb", "root", "root");
echo "Connected to MySQL via Docker!";

启动服务

docker-compose up

📚 权威参考


总结

场景方式推荐
快速运行 PHP 脚本docker run php:cli
开发网页应用php -Sphp:apache✅✅
构建可移植应用自定义 Dockerfile✅✅✅
搭建完整开发环境docker-compose✅✅✅

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *