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

标签 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 源代码?

最佳答案

我认为您不能跳过构建每个环境的过程。尽管您可以使用 docker hub 中的一些预构建图像来加快速度。

我将创建以下结构:

|-- 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

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

测试.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

...

关于docker - 有没有更简单的方法来使用 Docker 图像在多平台上测试 PHP 源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48923607/

相关文章:

docker - 当运行多个部署时,Kubernetes是否会受到Docker Swarm随机获得的 “update out of sequence”错误的困扰?

java - BeanCreationException : Error creating bean with name 'flywayInitializer'

testing - 如何在 JUnit 4 Webdriver 中遍历父 dom 元素并获取 id?

windows - 用IE7测试网站

python - Docker `/bin/sh: 1: [<executable>, : not found`

python-3.x - Python 远程调试器不会在 VS Code 中调试我的代码

docker - 应用更改时如何更新特定的 docker 图像

android - 如何避免 Android 测试应用程序中的代码重复?

Dockerfile RUN 命令占用大量磁盘空间

docker - 波浪号扩展在 Docker COPY 命令中不起作用