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

时间:2018-02-22 09:19:35

标签: docker testing dockerfile docker-machine docker-image

我正在对PHP源代码执行安全测试。脚本的功能高度依赖于底层基础架构,因为它具有针对Linux,OSx和Windows以及PHP 5.x,PHP 7.x,MySQL 4.x和5.x的优化。还有可能使用不同的数据库后端,如SQLite。

为了测试特定的功能,我写了一些很好的测试。我想重用该测试并在不同的环境中自动运行我的测试。我想使用Docker。但我对Docker来说还是一个新手。虽然我在Bash脚本中非常方便。我对现有容器和可能性进行了一些研究。但似乎没有简单的方法来获得所需的容器。

现在让我们忘记OSx和Windows,而只关注Linux。让事情变得更轻松在我理想的情况下,我在其自己的端口上启动了几个docker容器,在不同的基础架构上运行相同的软件,例如:

  • Linux,Apache 2.x,PHP 5.x,MySQL 4.x
  • Linux,Apache 2.x,PHP 5.x,MySQL 5.x
  • Linux,Apache 2.x,PHP 7.x,MySQL 4.x (如果可能的话)
  • Linux,Apache 2.x,PHP 7.x,MySQL 5.x
  • Linux,Apache 2.x,PHP 5.x,SQLite
  • Linux,Apache 2.x,PHP 7.x,SQLite

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

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

使用Docker镜像在多平台上测试PHP源代码是否更简单?

1 个答案:

答案 0 :(得分:1)

我认为你不能跳过构建每个环境的过程。尽管如此,您还可以使用Docker hub中的一些预先构建的图像来加速。

我创建了以下结构:

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

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

这是棘手的事情:

<强>搬运工-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

...