我正在对 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/