有没有更简单的方法来使用 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, 阿帕奇 2.x, PHP 5.x, MySQL 4.x
- Linux, 阿帕奇 2.x, PHP 5.x, MySQL 5.x
- Linux, Apache 2.x, PHP 7.x, MySQL 4.x (如果可能的话)
- Linux, 阿帕奇 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 图像的脚本之前,我想知道是否没有更简单的解决方案这个起来 运行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
...
我正在对 PHP 源代码进行安全测试。脚本的功能高度依赖于底层基础设施,因为它对 Linux、OSx 和 Windows 以及 PHP 5.x、[=69 进行了优化=] 7.x、MySQL 4.x 和 5.x。也有可能使用不同的数据库后端,如 SQLite。
我写了一些很好的测试来测试特定的功能。我想重用该测试并自动 运行 我在不同环境中的测试。我想为此使用 Docker 。但我对 Docker 很陌生。尽管我在 Bash 编写脚本方面非常得心应手。我对现有的容器和可能性做了一些研究。但似乎没有简单的方法来获得所需的容器。
让我们暂时忘记 OSx 和 Windows,只关注 Linux。让事情变得更容易。在我的理想场景中,我启动了几个 docker 容器,每个容器都在它自己的端口上,运行在不同的基础设施上运行相同的软件,例如:
- Linux, 阿帕奇 2.x, PHP 5.x, MySQL 4.x
- Linux, 阿帕奇 2.x, PHP 5.x, MySQL 5.x
- Linux, Apache 2.x, PHP 7.x, MySQL 4.x (如果可能的话)
- Linux, 阿帕奇 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 图像的脚本之前,我想知道是否没有更简单的解决方案这个起来 运行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
...