Docker Compose 是 Docker 官方提供的一个工具,可以通过 YAML 文件来定义多个容器,然后通过一个命令即可启动、停止和管理这些容器。因此,使用 Docker Compose 可以非常方便地搭建 PHP 运行环境,并支持 PHP 版本切换。
以下是一个示例的 docker-compose.yml 文件,用于创建一个基于 Nginx、PHP 和 MySQL 的运行环境:
version: '3'
services:
webserver:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./code:/var/www/html
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- php
php:
build:
context: .
dockerfile: Dockerfile-php
volumes:
- ./code:/var/www/html
- ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini
environment:
PHP_VERSION: "7.4"
depends_on:
- db
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: database
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- ./mysql/data:/var/lib/mysql
在上面的示例中,我们创建了三个服务,分别是 webserver、php 和 db。其中:
- webserver 服务使用 Nginx 镜像,并将宿主机的
./code目录映射到容器内的/var/www/html目录,将./nginx/conf.d目录映射到容器内的/etc/nginx/conf.d目录,同时将容器内的 80 端口映射到宿主机的 80 端口。这样,当我们在宿主机的./code目录中放置 PHP 代码时,就可以通过访问http://localhost来访问该代码。 - php 服务使用一个自定义的 Dockerfile 来构建 PHP 镜像,并将宿主机的
./code目录映射到容器内的/var/www/html目录,将宿主机的./php/php.ini文件映射到容器内的/usr/local/etc/php/conf.d/custom.ini文件,同时设置 PHP 版本为 7.4。这样,我们就可以通过自定义 Dockerfile 来构建支持不同 PHP 版本的镜像,并通过设置PHP_VERSION环境变量来切换 PHP 版本。 - db 服务使用 MySQL 镜像,并设置 MySQL 的 root 密码、数据库名、用户名和密码,将宿主机的
./mysql/data目录映射到容器内的/var/lib/mysql目录。这样,当我们在 PHP 代码中需要连接 MySQL 数据库时,就可以使用db作为主机名来连接。
在上面的示例中,我们还使用了 depends_on 属性来定义服务之间的依赖关系,这样在启动这些服务时,Docker Compose 就会按照正确的