
我们在Web开发中,LAMP环境(Linux、Apache、MySQL、PHP)是一种经典的技术栈,广泛用于构建和部署动态网站。然而,手动配置和管理LAMP环境可能会耗时且容易出错。借助Docker Compose,我们可以快速搭建、管理和扩展 LAMP 环境,实现更高效的 Web 项目开发流程。
本文将带您通过具体的步骤,使用 Docker Compose 创建一个完整的 LAMP 环境,并介绍每个组件的配置要点,帮助您轻松上手并掌握相关技巧。
一、为什么选择 Docker Compose?
Docker Compose 是 Docker 官方提供的一个工具,专为多容器应用程序而设计。相比于传统的手动配置方式,Docker Compose 具有以下优势:
✅ 快速部署:只需一条命令即可启动整个 LAMP 环境。
✅ 环境一致性:开发、测试、生产环境配置完全一致,减少“在我机器上能跑”的问题。
✅ 易于扩展:通过修改 `docker-compose.yml` 文件轻松增加或调整服务。
✅ 高效管理:Docker Compose 提供的 `up`、`down`、`logs` 等命令极大简化了运维工作。
二、项目目录结构
在开始之前,建议遵循以下的项目目录结构,以便更好地管理各个服务和配置文件:
/my-lamp-project
├── docker-compose.yml
├── apache
│ └── vhost.conf
├── php
│ └── Dockerfile
├── mysql
│ └── init.sql
├── www
│ └── index.php
每个文件将在后文中详细介绍其作用和配置。
三、编写 `docker-compose.yml`
`docker-compose.yml` 是 Docker Compose 的核心配置文件,用于定义各个服务。以下是一个完整的 LAMP 配置示例:
version: '3.8'
services:
apache:
image: httpd:2.4
volumes:
- ./www:/var/www/html
- ./apache/vhost.conf:/usr/local/apache2/conf/httpd.conf
ports:
- "8080:80"
depends_on:
- php
php:
build: ./php
volumes:
- ./www:/var/www/html
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: lamp_db
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: mysql
MYSQL_ROOT_PASSWORD: root
ports:
- "8081:80"
四、配置每个服务
1. 配置 Apache
Apache 配置文件 `vhost.conf` 用于定义虚拟主机,以确保 PHP 文件能够正确解析。
ServerName localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
AddType application/x-httpd-php .php
2. 编写 PHP Dockerfile
为了确保 PHP 与 Apache 兼容并支持各种扩展,建议使用官方 PHP 镜像并根据项目需要安装扩展。
`php/Dockerfile`
FROM php:8.2-apache
# 安装扩展
RUN docker-php-ext-install mysqli pdo pdo_mysql
# 启用 Apache 的 mod_rewrite 模块
RUN a2enmod rewrite
# 设置工作目录
WORKDIR /var/www/html
3. 初始化 MySQL 数据库
在 `mysql/init.sql` 中编写初始 SQL 脚本,以快速构建数据库结构并填充基础数据。
`mysql/init.sql`
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
INSERT INTO users (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com');
4. 编写 PHP 测试文件
在 `www/index.php` 中编写测试代码,验证 PHP、MySQL 和 Apache 是否成功集成。
`www/index.php`
<?php
$servername = "mysql";
$username = "user";
$password = "password";
$database = "lamp_db";
$conn = new mysqli($servername, $username, $password, $database);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . " - 姓名: " . $row["name"] . " - 邮箱: " . $row["email"] . "<br>";
}
} else {
echo "暂无用户数据";
}
$conn->close();
?>
五、启动项目
在项目根目录下,执行以下命令启动服务:
docker-compose up -d
查看服务状态
运行以下命令,查看服务状态是否正常:
docker-compose ps
访问服务
访问 Apache Web 服务器:[http://localhost:8080](http://localhost:8080)
访问 phpMyAdmin:[http://localhost:8081](http://localhost:8081)
六、常见问题及解决方法
1. PHP 页面无法解析?
✅ 检查 `vhost.conf` 中 `AddType application/x-httpd-php .php` 是否已配置。
✅ 确保 PHP 服务已启动,并且 `docker-compose ps` 中 PHP 容器状态为 `Up`。
2. 数据库连接失败?
✅ 确保 MySQL 容器启动成功。
✅ 检查 MySQL 环境变量,确保 `MYSQL_DATABASE`、`MYSQL_USER`、`MYSQL_PASSWORD` 与 PHP 代码中的配置一致。
3. phpMyAdmin 无法访问?
✅ 检查 `PMA_HOST` 环境变量是否正确指向 `mysql` 服务。
✅ 执行 `docker-compose logs phpmyadmin` 查看详细错误日志。
七、优化建议
为提升 LAMP 环境的稳定性和性能,建议进一步优化:
✅ 数据卷持久化:将 MySQL 数据库数据保存在宿主机上,避免数据丢失。
✅ 使用 `.env` 文件:将敏感信息(如密码、数据库名)移至 `.env` 文件,避免硬编码。
✅ 增加备份策略:设置 MySQL 数据库的自动备份机制,确保数据安全。
我们使用Docker Compose搭建LAMP环境,能够显著简化Web开发中的环境配置和管理。通过模块化的`docker-compose.yml`文件,开发者可以快速启动、扩展和管理各个服务,实现更高效的项目开发流程。











