# 构建高效的 Docker Compose PHP LAMP 开发环境：实践指南

在本文中，我们将介绍如何使用 Docker Compose 快速搭建一个 PHP LAMP（Linux + Apache + MySQL + PHP）开发环境，让您能够高效地进行 Web 开发。

**步骤 1：安装 Docker 和 Docker Compose** 首先，您需要在您的机器上安装 Docker 和 Docker Compose。您可以从 Docker 官方网站（[https://www.docker.com/get-started](https://www.docker.com/get-started)）下载并按照指引安装适用于您操作系统的版本。

**步骤 2：创建项目目录结构**

在您的工作目录下创建一个文件夹用于存放开发相关的文件，比如“[lamp](https://github.com/luxiaoyou/awesome-compose/tree/main/lamp)”

**步骤3: 下载**[**php-7.4.33.tar.gz**](https://www.php.net/distributions/php-7.4.33.tar.gz)**源码**

将[php-7.4.33.tar.gz](https://www.php.net/distributions/php-7.4.33.tar.gz)源码下载到您创建的目录下。下载源码目的是为了编译mysqli.so扩展，此操作将在制作构建镜像的时候执行。

```bash
wget https://www.php.net/distributions/php-7.4.33.tar.gz
```

**步骤4: 编写**[**Dockerfile**](https://github.com/luxiaoyou/awesome-compose/blob/main/lamp/Dockerfile)**配置文件**

这里我们使用“php:7.4-apache”作为基础镜像,使用`docker pull php:7.4-apache`提前拉去镜像。在项目目录中创建一个名为 "[Dockerfile](https://github.com/luxiaoyou/awesome-compose/blob/main/lamp/Dockerfile)" 的文件，并使用文本编辑器打开它。然后，将以下内容粘贴到该文件中：

```dockerfile
FROM php:7.4-apache

LABEL MAINTAINER="Bruce Lu <bruce.lu@luxiaoyou.com>"

ARG PHP_VER_NUM=7.4.33
ARG WEB_ROOT=/var/www/html

ADD ./php-${PHP_VER_NUM}.tar.gz ${WEB_ROOT}

WORKDIR ${WEB_ROOT}/php-${PHP_VER_NUM}/ext/mysqli

RUN /usr/local/bin/phpize \
    && ./configure \
    && make \
    && make install \
    && echo 'extension=mysqli' > /usr/local/etc/php/conf.d/docker-php-ext-mysqli.ini \
    && rm ${WEB_ROOT}/* -rvf

WORKDIR ${WEB_ROOT}
```

执行下面代码构建`php:7.4-apache-mysqli`镜像

```bash
docker build --no-cache -t php:7.4-apache-mysqli .
```

**步骤 5：编写 Docker Compose 配置文件** 在项目目录中创建一个名为 "[docker-compose.yml](https://github.com/luxiaoyou/awesome-compose/blob/main/lamp/docker-compose.yaml)" 的文件，并使用文本编辑器打开它。然后，将以下内容粘贴到该文件中：

```yaml
version: '3'
services:
  web:
    image: php:7.4-apache-mysqli
    ports:
      - "8000:80"
    volumes:
      - ./web_root:/var/www/html
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root2023
      MYSQL_DATABASE: mydb
      MYSQL_USER: bruce
      MYSQL_PASSWORD: bruce2023
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:
```

这个 Docker Compose 配置文件定义了两个服务：web（Apache + PHP）和 db（MySQL）。"volumes" 部分用于持久化 MySQL 数据。记得将数据库的相关账户信息改成您自己的。

**步骤 6：创建网站文件夹** 在项目目录中创建一个名为 "web\_root" 的文件夹，用于存放您的 PHP 项目文件。比如“index.php”,代码如下：

```php
<?php
echo 'welcome to <a href="https://luxiaoyou.com/">luxiaoyou.com</a>';

$host = 'db'; // MySQL服务器主机名
$username = 'root'; // MySQL用户名
$password = 'root2023'; // MySQL密码
$database = 'mydb'; // 要连接的数据库名称


// 创建数据库连接
$conn = new mysqli($host, $username, $password, $database);

// 检查连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

echo " MySQL 连接成功!!";

// 在这里可以执行你的数据库查询和操作

// 关闭数据库连接
$conn->close();
?>
```

**步骤 7：构建和启动容器** 在终端中切换到您的项目目录，并运行以下命令来构建并启动容器：

```bash
docker-compose up -d
```

**步骤 8：访问您的 PHP 网站** 打开您的 Web 浏览器，并访问 "http://localhost:8000"。您应该能够看到一个如下图页面，表示您的 PHP LAMP 开发环境已经成功搭建起来了。

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1691926106783/6de3a207-5255-45d2-97ac-51dc1a7bfdb1.png align="center")

**步骤 9：停止并清理容器** 当您完成开发工作后，您可以使用下面的命令停止并清理容器：

```bash
docker-compose down
```

这将停止并移除所有相关的容器和网络。

**总结**： 使用 Docker Compose 搭建自己的 PHP LAMP 开发环境可以帮助您快速、方便地进行 Web 开发工作。通过容器化技术，您可以避免与不同版本的软件和依赖项之间的冲突，同时还可以轻松地与团队共享和部署开发环境。希望本文能够帮助您顺利搭建和使用您的 PHP LAMP 开发环境！

使用到的源码：https://github.com/luxiaoyou/awesome-compose/tree/main/lamp
