phpexperts/docker

将任何 PHP 应用程序/库切换到使用 Docker 的最快、最简单的方法。

v11.0.0 2024-09-08 14:20 UTC

README

一个用于快速部署 Docker 的 PHP 应用程序的实用工具。

观看零依赖安装视频: https://youtu.be/d8o9p2DimME
在 2 分钟内在遗留 PHP 5.6 应用程序上安装: https://youtu.be/xZxaJcsbrWU

该项目已针对超过 350,000 个开源 Packagist 软件包进行测试(通过 Bettergist Archiver 项目),并且与其中 99.999% 兼容。

包含

  • PHP 5.6, 7.0-7.4 + 8.0, 8.1, 8.2, 和 8.3,以及 8.4-beta4。
  • Nginx
  • Redis v7.2
  • PostgreSQL v16
  • MariaDB v10.11
  • Oracle ext-oci

《phpexperts/php:VESION-full》镜像包含所有捆绑的 PHP 扩展和 Redis。

  • imap
  • ldap
  • pspell
  • redis
  • snmp
  • xmlrpc

《phpexperts/php:VERSION-oracle》镜像包含完整镜像中的所有内容,以及 Oracle(ext-oci8)的驱动程序。

如果您需要 full 构建中不可用的扩展,请在 GitHub 上创建一个问题。

安装

通过 Bash(零 PHP 依赖项)

bash <(curl -s 'https://raw.githubusercontent.com/PHPExpertsInc/dockerize/v10.0/dockerize.sh')

然后编辑 .env 中的凭据。

docker compose up -d

通过 Composer

# Ensure that vendor/bin is in your PATH and before /usr/bin.
composer require --dev phpexperts/dockerize
vendor/bin/php dockerize
# Edit credentials in .env.
docker-compose up -d

别忘了编辑你的 docker-compose.yml!

配置你的 PATH

为了将你的现有 PHP 项目 docker 化,请执行以下操作

确保你的 profile PATH 包含 ./vendor/bin,并且它优先于可能包含 php 可执行文件的任何其他目录

PATH=./vendor/bin:$PATH

感谢 JetBrains

JetBrains 慷慨地授予本项目免费开源许可证,以使用 PhpStorm 和所有其他 JetBrains 产品,作为其 开源许可证 创新项目的一部分。

与其他 dockerized PHP 项目的优势

  1. 超级快,完全自动安装。(非常适合在 CI 上测试多个版本)
  2. www.phpdocker.io 相比,Dockerize PHP 的一个重大区别是,Dockerize PHP 提供了所有客户端工具,而 phpdocker.io 提供了其中没有任何一个。

开箱即用,你有每个项目的二进制文件

  • php
  • composer
  • php-ci.sh
  • mysql
  • mysqldump
  • psql
  • pg_dump
  • createdb
  • dropdb
  • redis
  • redis-cli

通过 Docker 的 PHP CI

使用 php-ci.sh 脚本,你可以轻松地测试你的应用程序或库与每个主要版本的 PHP(目前为 7.4-8.3)兼容性

在项目根目录中,你的 phpunit.xml 所在的位置,或者你通常运行 phpunit 的位置

vendor/bin/php-ci.sh

然后它会自动更新 composer 并运行适用于你项目支持的所有主要 PHP 版本的适当的 PHPUnit 版本。

最新更改

v11.0.0

  • [2024-09-07 18:55:07 CDT] [重大] 升级到 Ubuntu 24.04 Noble Numbat。
  • [2024-09-07 18:55:45 CDT] 通过重新添加 php-fpm 修复了 web-debug 中的重大回滚。
  • [2024-09-07 17:20:24 CDT] 为创建无依赖的 PHP 镜像添加了初始步骤。origin/v11.0
  • [2024-09-07 19:00:42 CDT] 使用 docker volume 存储 apt 元数据。

v10.0.3

  • [2024-06-29 10:13:12 CDT] [php-ci] 从 composer.json 动态获取和计算支持的 PHP 版本。
  • [2024-06-29 10:20:39 CDT] [php-ci] 如果没有特定版本的 xml,则使用 phpunit 的默认配置。
  • 【2024-06-29 10:20:48 CDT】 [php-ci] 增加了支持 PHPUnit v11。
  • 【2024-06-29 10:31:50 CDT】 为 phpexperts/dockerise 创建了 Packagist 别名以优化 SEO。

v10.0.2

  • 【2024-06-26 00:57:05 CDT】 添加了我的 php-ci.sh 脚本。

v10.0.0

  • 【2024-05-24 07:40:15 CDT】 添加了一个综合的零依赖 Bash-via-curl 安装器。
  • 【2024-05-24 07:31:26 CDT】 为 nginx 添加了一个寻找第一个开放的 HTTP 端口的机制。master
  • 【2024-05-24 07:30:16 CDT】 从 docker 中移除了 Redis v7.3;切换到 v7.2。

v9.2.1

  • 【2024-05-23 08:17:00 CDT】 升级到 MariaDB 10.11,Redis 7.3 和 Postgres 16。

v9.2.0

  • 【2024-05-21 21:31:26 CDT】 配置了 composer 以运行安装脚本。

v9.1.2

  • 【2024-05-21 06:27:48 CDT】 修复了 docker logs 被截断的问题。origin/v9。

v9.1.1

  • 【2024-01-16 03:15:49 CST】 [重大] 修复了一个阻止 dockerized php CLI 在定义了网络的项目中运行的严重错误。
  • 【2024-01-14 14:22:31 CST】 修复了 Docker 安装器。
  • 【2024-01-14 14:13:58 CST】 重命名了安装器。
  • 【2024-01-14 14:12:02 CST】 将安装器从 wget 切换到 curl。

v9.1.0: 新的零依赖 Bash 安装器

  • 【2024-01-14 07:06:07 CST】 添加了一个零 PHP 依赖的 Bash 安装器。
  • 【2024-01-14 07:04:47 CST】 在基础 Linux 映像中添加了对 Linux ACL 的支持。
  • 【2024-01-14 07:03:35 CST】 修复了 base-oracle 中的 docker 构建错误。

v9.0.1

  • 【2024-01-14 06:40:56 CDT】 [重大] 修复了一个阻止 dockerized php CLI 在新项目中运行的严重错误。

v9.0.0: 版本 9.0.0:新的完整 PHP 映像、Oracle ext-oci8 和新的构建系统。

  • 【2024-01-13 23:04:49 CST】 添加了针对 Ubuntu 22.04 构建的 Oracle ext-oci8 二进制文件。
  • 【2024-01-13 22:51:39 CST】 添加了一个包含 Oracle DB 的 ext-oci8 扩展的 docker 构建。
  • 【2024-01-13 22:50:16 CST】 在基础 PHP 映像中添加了 wget。
  • 【2024-01-12 17:30:47 CST】 重构了 IonCube 构建,使扩展只下载一次。
  • 【2024-01-12 14:49:27 CST】 添加了一个包含所有捆绑的 PHP 扩展(以及更多)的 full docker 构建。

使用 docker-compose 管理

要控制容器,请使用 docker-compose

# Downloads the images, creates and launches the containers.
docker-compose up -d
# View the logs
docker-compose logs -ft
# Stop the containers
docker-compose stop

就这么多!您现在拥有最新的 LEPP(Linux、Nginx、PostgreSQL、PHP)栈或最新的 LEMP(Linux、Nginx、MariaDB、PHP)栈。

用户 ID 控制

可以控制初始进程(通常是 PHP)和/或 PHP-FPM 进程运行的 UID。 bin/php 文件已经为初始进程完成了这项工作。

如果您要将卷挂载到容器中,这很重要,因为初始进程或 PHP-FPM 的 UID 可能需要与卷匹配,以便能够读取和/或写入它。

PHP-FPM 进程 UID

要设置 PHP-FPM 进程的 UID,您应该在容器上设置 PHP_FPM_USER_ID 环境变量。例如

docker run -e PHP_FPM_USER_ID=1000 phpexperts/php:7 php-fpm5.6

php.ini 指令

您可以通过在容器中设置环境变量来修改某些 php.ini 指令。以下是环境变量及其对应的 php.ini 指令列表

例如,以下命令将以 30 兆字节的 post_max_size 启动 PHP 容器

docker run -e PHP_POST_MAX_SIZE=30M phpexperts/php:7

分发

Docker Hub

关于 PHP Experts, Inc.

PHP Experts, Inc.是我的咨询公司。这是一家由包括我在内的一小群技术精湛的全栈PHP开发者组成的公司,我们将他们安排在其他公司的1099职位上。我们提供长期和短期职位,对于像我这样的疯狂开发者来说,短期职位也是可以的。如果你每隔几个月或几周就想在不同的项目/公司工作,无论是在美国大陆、欧洲还是东南亚,那将非常棒。

自2015年以来,我在拉斯维加斯、休斯顿、英国、都柏林、哥斯达黎加、哥伦比亚、印度和菲律宾设立了分支机构。如果有人在上述任何地方有工作许可,我们几乎可以把你安排到你想要去的任何地方。我50%的时间都在选择性地旅行。遍布世界各地。