有没有更简单的方法来使用 Docker 图像在多平台上测试 PHP 源代码?

Is there an easier way to test PHP source-code on multi-platforms using Docker images?

我正在对 PHP 源代码进行安全测试。脚本的功能高度依赖于底层基础设施,因为它对 Linux、OSx 和 Windows 以及 PHP 5.x、[=69 进行了优化=] 7.x、MySQL 4.x 和 5.x。也有可能使用不同的数据库后端,如 SQLite。

我写了一些很好的测试来测试特定的功能。我想重用该测试并自动 运行 我在不同环境中的测试。我想为此使用 Docker 。但我对 Docker 很陌生。尽管我在 Bash 编写脚本方面非常得心应手。我对现有的容器和可能性做了一些研究。但似乎没有简单的方法来获得所需的容器。

让我们暂时忘记 OSx 和 Windows,只关注 Linux。让事情变得更容易。在我的理想场景中,我启动了几个 docker 容器,每个容器都在它自己的端口上,运行在不同的基础设施上运行相同的软件,例如:

最好使用轻量级 Linux 发行版,例如 Arch 或 Alpine。

我刚刚用 Ubuntu 作为发行版完成了一些成功的测试,但在我自己编写所有这些 Docker 图像的脚本之前,我想知道是否没有更简单的解决方案这个起来 运行ning.

是否有更简单的方法来使用 Docker 图像在多平台上测试 PHP 源代码?

我认为您不能跳过构建每个环境的过程。尽管您可以使用来自 docker 集线器的一些 pre-builted 图像来加快速度。

我将创建以下结构:

|-- test.sh
|-- docker-compose.yml
|-- php5.X
|   `-- Dockerfile
|-- php7.X
    `-- Dockerfile

在每个 Dockerfile 中,如果您需要如此定制它们,您可以使用基础映像并安装所需的一切。

这是棘手的事情:

docker-compose.yml

version: '3'
services:
  db:
    image: mysql:${MYSQL_VERSION}
    environment:
      - MYSQL_ROOT_PASSWORD=secret
  web:
    build:
      context: .
      dockerfile: php${PHP_VERSION}/Dockerfile
    depends_on:
      - db

这样您将根据环境变量 运行 不同的版本,因此您可以轻松地在脚本中执行此操作:

test.sh

export MYSQL_VERSION=5.6
export PHP_VERSION=7.1

docker-compose up --abort-on-container-exit

export MYSQL_VERSION=5.5
export PHP_VERSION=5.6

docker-compose up --abort-on-container-exit

...