docker-composer 编写PHP运行环境 并支持PHP版本切换(自用)

375 阅读2分钟

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 就会按照正确的