Docker – 启动phpunittesting套件最简单的方法是什么?

docker上启动phpunit有没有什么好方法(更快)? 这里我曾经做过的事情:

docker-compose build docker-compose up docker ps docker exec <container_id> phpunit --configuration /myproject/src/Tests/phpunit.xml --testsuite testAllSuites 

注意 :我不想使用卷来同步文件,所以现在每次我必须重build项目..我试图找出如何启动testing特定的容器,而不指定containe_id ..是否有可能使用build name来启动它?

不需要做一个容器id的复杂查询,下面是一个如何在docker-compose中执行的例子:

 $ cat docker-compose.yml version: '2' volumes: testvol: driver: local services: testapp: image: busybox entrypoint: "top" volumes: - testvol:/data testapp2: image: busybox entrypoint: "top" volumes: - testvol:/data $ ../bin/docker-compose up -d Creating test_testapp_1 Creating test_testapp2_1 $ ../bin/docker-compose ps Name Command State Ports ----------------------------------------- test_testapp2_1 top Up test_testapp_1 top Up $ ../bin/docker-compose exec testapp ls -l total 40 drwxr-xr-x 2 root root 12288 Mar 18 16:39 bin drwxr-xr-x 2 root root 4096 Jun 11 11:07 data drwxr-xr-x 5 root root 360 Jun 13 11:50 dev drwxr-xr-x 2 root root 4096 Jun 13 11:50 etc drwxr-xr-x 2 nobody nogroup 4096 Mar 18 16:38 home dr-xr-xr-x 224 root root 0 Jun 13 11:50 proc drwxr-xr-x 2 root root 4096 Mar 18 16:38 root dr-xr-xr-x 13 root root 0 Jun 13 11:50 sys drwxrwxrwt 2 root root 4096 Mar 18 16:38 tmp drwxr-xr-x 3 root root 4096 Mar 18 16:39 usr drwxr-xr-x 4 root root 4096 Mar 18 16:39 var 

你也可以利用docker-compose命名的一致的容器命名(它预先设置目录名称并附加一个数字进行缩放),以使用docker exec运行单个容器上的docker exec

 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 069d40e3b6c7 busybox "top" 2 minutes ago Up 2 minutes test_testapp2_1 60e6d34d3b5a busybox "top" 2 minutes ago Up 2 minutes test_testapp_1 $ docker exec test_testapp_1 ls -l total 40 drwxr-xr-x 2 root root 12288 Mar 18 16:39 bin drwxr-xr-x 2 root root 4096 Jun 11 11:07 data drwxr-xr-x 5 root root 360 Jun 13 11:50 dev drwxr-xr-x 2 root root 4096 Jun 13 11:50 etc drwxr-xr-x 2 nobody nogroup 4096 Mar 18 16:38 home dr-xr-xr-x 226 root root 0 Jun 13 11:50 proc drwxr-xr-x 2 root root 4096 Mar 18 16:38 root dr-xr-xr-x 13 root root 0 Jun 13 11:50 sys drwxrwxrwt 2 root root 4096 Mar 18 16:38 tmp drwxr-xr-x 3 root root 4096 Mar 18 16:39 usr drwxr-xr-x 4 root root 4096 Mar 18 16:39 var 

我只是想出了一个最简单的方法来启动我的php-fpm容器的phpunittesting,在这里命令:

 docker exec $(docker ps -n=-1 -q --filter name=my_php_container_name --format="{{.ID}}") phpunit --configuration /myproject/src/Tests/phpunit.xml --testsuite testAllSuites 

所以现在每当我改变我的代码在这里我做什么:

 docker-compose build docker-compose up docker exec $(docker ps -n=-1 -q --filter name=my_php_container_name --format="{{.ID}}") phpunit --configuration /myproject/src/Tests/phpunit.xml --testsuite testAllSuites 

所以这意味着我不必显示所有的docker容器(docker ps)来获取id并手动更新命令来启动新的容器id上的phpunit。

运行此命令将返回只有container_id:

 docker ps -n=-1 -q --filter name=my_php_container_name --format="{{.ID}}" 

这里有一些解释:

-n = -1 :显示最后的ceated容器

-q :只显示数字ID

有关这里的docker文档选项的更多细节

注意:例如,如果我们将phpunit.xml文件移动到/ myproject / root下,那么phpunit命令可以更小,如果我们运行phpunit,它会自动加载phpunit.xml并在/ Tests /下运行所有​​的testing文件夹和命令将是:

 docker exec $(docker ps -n=-1 -q --filter name=my_php_container_name --format="{{.ID}}") phpunit 

编辑:

通过PHPstorm启动testing的另一个好方法是: 使用PHPUnit和Docker在PHPStorm中运行testing

希望这可以帮助别人…