设置我们的 PHP 开发容器
我们需要一个用于 PHP 应用程序的开发环境。我们将把开发环境结构分为两个主要部分:Docker 容器(服务器)和 PHP 应用程序。
docker 目录将包含以下内容:
-
Dockerfile
-
docker-compose.yml
-
服务器配置
codebase 目录将用作以下内容:
-
PHP 应用程序的根目录
-
Composer
包的Vendor
目录
现在,让我们设置 PHP 开发容器:
-
在您的机器中创建以下目录结构:
Figure 1. Figure 3.1 – Base tree -
运行以下命令:
$ mkdir -p ~/phptdd/docker $ mkdir -p ~/phptdd/codebase
-
安装 Docker Desktop。在创建所需的 Docker 文件之前,我们需要下载并安装 Docker Desktop。
对于 macOS 用户,可以从 https://docs.docker.com/desktop/mac/install/ 下载
Docker
。对于 Windows 用户,下载链接为 https://docs.docker.com/desktop/windows/install/。
在 macOS 计算机上安装 Docker Desktop 后,我们现在可以组织我们的开发目录。
-
我们需要在
phptdd/docker/
目录中创建一个Dockerfile
。创建一个phptdd/docker/Dockerfile
文件,如下所示:FROM php:8.1.3RC1-apache-buster RUN docker-php-ext-install mysqli pdo pdo_mysql
我们在第一行使用
FROM
关键字声明基础 Docker 映像。每个Dockerfile
都必须以这个关键字开头。第二行是在当前映像之上运行命令的指令。由于我们的项目还需要一个数据库,因此我们可以安装所需的 MySQL 扩展。
我们的示例项目不仅仅需要 PHP:我们还需要数据库、Web 服务器和其他工具。因此,我们需要一种方法来运行和组织多个容器。接下来让我们看看如何做到这一点。
创建多个容器
要运行多个容器,我们可以使用安装 Docker Desktop 时预安装的 Compose
工具。 创建一个 phptdd/docker/docker-compose.yml
文件,如下所示:
version: "3.7"
services:
# Web Server
server-web:
build:
dockerfile: ./Dockerfile
context: .
restart: always
volumes:
- "../codebase/:/var/www/html/"
ports:
- "8081:80"
# MySQL Database
server-mysql:
image: mysql:8.0.19
restart: always
environment:
MYSQL_ROOT_PASSWORD: mypassword
volumes:
- mysql-data:/var/lib/mysql
# Optional MySQL Management Tool
app-phpmyadmin:
image: phpmyadmin/phpmyadmin:5.0.1
restart: always
environment:
PMA_HOST: server-mysql
PMA_USER: root
PMA_PASSWORD: mypassword
ports:
- "3333:80"
volumes:
mysql-data:
在我们的 docker-compose.yml
文件中,我们声明并配置了三个主要容器,它们都可以通过不同的端口访问:
-
Web 服务器:server-web
-
MySQL DB 服务器:server-mysql
-
phpMyAdmin:app-phpmyadmin
我们能够安装 Docker Desktop 并创建所需的 Dockerfile
和 docker-compose.yml
文件包含构建容器的模板。让我们尝试运行所有容器并确保它们配置正确并且可以相互通信。