1*cc02d7e2SAndroid Build Coastguard Worker 2*cc02d7e2SAndroid Build Coastguard Worker# Docker Images for Testing 3*cc02d7e2SAndroid Build Coastguard Worker 4*cc02d7e2SAndroid Build Coastguard WorkerThis directory contains a number of docker images to assist testing the 5*cc02d7e2SAndroid Build Coastguard Worker[gRPC PECL extension](http://pecl.php.net/package/grpc) against various 6*cc02d7e2SAndroid Build Coastguard Workerdifferent PHP environments. 7*cc02d7e2SAndroid Build Coastguard Worker 8*cc02d7e2SAndroid Build Coastguard Worker 9*cc02d7e2SAndroid Build Coastguard Worker## Build and Run Tests 10*cc02d7e2SAndroid Build Coastguard Worker```sh 11*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc 12*cc02d7e2SAndroid Build Coastguard Worker``` 13*cc02d7e2SAndroid Build Coastguard Worker 14*cc02d7e2SAndroid Build Coastguard WorkerTo build all docker images: 15*cc02d7e2SAndroid Build Coastguard Worker```sh 16*cc02d7e2SAndroid Build Coastguard Worker$ ./src/php/bin/build_all_docker_images.sh 17*cc02d7e2SAndroid Build Coastguard Worker``` 18*cc02d7e2SAndroid Build Coastguard Worker 19*cc02d7e2SAndroid Build Coastguard WorkerOr to only build some selected images 20*cc02d7e2SAndroid Build Coastguard Worker```sh 21*cc02d7e2SAndroid Build Coastguard Worker$ ./src/php/bin/build_all_docker_images.sh grpc-ext php-src 22*cc02d7e2SAndroid Build Coastguard Worker``` 23*cc02d7e2SAndroid Build Coastguard Worker 24*cc02d7e2SAndroid Build Coastguard WorkerOr to only print out individual `docker build` commands 25*cc02d7e2SAndroid Build Coastguard Worker```sh 26*cc02d7e2SAndroid Build Coastguard Worker$ ./src/php/bin/build_all_docker_images.sh --cmds 27*cc02d7e2SAndroid Build Coastguard Worker``` 28*cc02d7e2SAndroid Build Coastguard Worker 29*cc02d7e2SAndroid Build Coastguard WorkerTo run all tests: 30*cc02d7e2SAndroid Build Coastguard Worker```sh 31*cc02d7e2SAndroid Build Coastguard Worker$ ./src/php/bin/run_all_docker_images.sh 32*cc02d7e2SAndroid Build Coastguard Worker``` 33*cc02d7e2SAndroid Build Coastguard Worker 34*cc02d7e2SAndroid Build Coastguard WorkerOr to only run some selected images 35*cc02d7e2SAndroid Build Coastguard Worker```sh 36*cc02d7e2SAndroid Build Coastguard Worker$ ./src/php/bin/run_all_docker_images.sh grpc-ext php-src 37*cc02d7e2SAndroid Build Coastguard Worker``` 38*cc02d7e2SAndroid Build Coastguard Worker 39*cc02d7e2SAndroid Build Coastguard WorkerOr to only print out individual `docker run` commands 40*cc02d7e2SAndroid Build Coastguard Worker```sh 41*cc02d7e2SAndroid Build Coastguard Worker$ ./src/php/bin/run_all_docker_images.sh --cmds 42*cc02d7e2SAndroid Build Coastguard Worker``` 43*cc02d7e2SAndroid Build Coastguard Worker 44*cc02d7e2SAndroid Build Coastguard Worker## Build and Run Specified Image 45*cc02d7e2SAndroid Build Coastguard Worker### `grpc-ext` 46*cc02d7e2SAndroid Build Coastguard WorkerThis image builds the full `grpc` PECL extension (effectively the current 47*cc02d7e2SAndroid Build Coastguard Workerrelease candidate), installs it against the current PHP version, and runs the 48*cc02d7e2SAndroid Build Coastguard Workerunit tests. 49*cc02d7e2SAndroid Build Coastguard Worker 50*cc02d7e2SAndroid Build Coastguard WorkerBuild `grpc-ext` docker image: 51*cc02d7e2SAndroid Build Coastguard Worker```sh 52*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc 53*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/grpc-ext -f ./src/php/docker/grpc-ext/Dockerfile . 54*cc02d7e2SAndroid Build Coastguard Worker``` 55*cc02d7e2SAndroid Build Coastguard Worker 56*cc02d7e2SAndroid Build Coastguard WorkerRun image: 57*cc02d7e2SAndroid Build Coastguard Worker```sh 58*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm grpc-php/grpc-ext 59*cc02d7e2SAndroid Build Coastguard Worker``` 60*cc02d7e2SAndroid Build Coastguard Worker 61*cc02d7e2SAndroid Build Coastguard Worker### `grpc-src` 62*cc02d7e2SAndroid Build Coastguard Worker 63*cc02d7e2SAndroid Build Coastguard WorkerThis image builds the `grpc` PECL extension in a 'thin' way, only containing 64*cc02d7e2SAndroid Build Coastguard Workerthe gRPC extension source files. The gRPC C Core library is expected to be 65*cc02d7e2SAndroid Build Coastguard Workerinstalled separately and dynamically linked. The extension is installed 66*cc02d7e2SAndroid Build Coastguard Workeragainst the current PHP version. 67*cc02d7e2SAndroid Build Coastguard Worker 68*cc02d7e2SAndroid Build Coastguard WorkerThis also allows us to compile our `grpc` extension with some additional 69*cc02d7e2SAndroid Build Coastguard Workerconfigure options, like `--enable-tests`, which allows some additional unit 70*cc02d7e2SAndroid Build Coastguard Workertests to be run. 71*cc02d7e2SAndroid Build Coastguard Worker 72*cc02d7e2SAndroid Build Coastguard WorkerBuild `grpc-src` docker image: 73*cc02d7e2SAndroid Build Coastguard Worker```sh 74*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc 75*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/grpc-src -f ./src/php/docker/grpc-src/Dockerfile . 76*cc02d7e2SAndroid Build Coastguard Worker``` 77*cc02d7e2SAndroid Build Coastguard Worker 78*cc02d7e2SAndroid Build Coastguard WorkerRun image: 79*cc02d7e2SAndroid Build Coastguard Worker```sh 80*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm grpc-php/grpc-src 81*cc02d7e2SAndroid Build Coastguard Worker``` 82*cc02d7e2SAndroid Build Coastguard Worker 83*cc02d7e2SAndroid Build Coastguard Worker### `alpine` 84*cc02d7e2SAndroid Build Coastguard Worker 85*cc02d7e2SAndroid Build Coastguard WorkerThis image builds the `grpc` extension against the current PHP version in an 86*cc02d7e2SAndroid Build Coastguard WorkerAlpine-Linux base image. 87*cc02d7e2SAndroid Build Coastguard Worker 88*cc02d7e2SAndroid Build Coastguard WorkerBuild `alpine` docker image: 89*cc02d7e2SAndroid Build Coastguard Worker```sh 90*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc 91*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/alpine -f ./src/php/docker/alpine/Dockerfile . 92*cc02d7e2SAndroid Build Coastguard Worker``` 93*cc02d7e2SAndroid Build Coastguard Worker 94*cc02d7e2SAndroid Build Coastguard WorkerRun image: 95*cc02d7e2SAndroid Build Coastguard Worker```sh 96*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm grpc-php/alpine 97*cc02d7e2SAndroid Build Coastguard Worker``` 98*cc02d7e2SAndroid Build Coastguard Worker### `centos7` 99*cc02d7e2SAndroid Build Coastguard Worker 100*cc02d7e2SAndroid Build Coastguard WorkerThis image builds the `grpc` extension against the GCC version in Centos7 base image. The default version of gcc in centos7 is gcc-4.8.5. Run `scl enable devtoolset-7 bash` command to enable gcc-7.3.1. 101*cc02d7e2SAndroid Build Coastguard Worker 102*cc02d7e2SAndroid Build Coastguard WorkerBuild `centos7` docker image: 103*cc02d7e2SAndroid Build Coastguard Worker```sh 104*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc 105*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-gcc7/centos -f ./src/php/docker/centos7/Dockerfile . 106*cc02d7e2SAndroid Build Coastguard Worker``` 107*cc02d7e2SAndroid Build Coastguard Worker 108*cc02d7e2SAndroid Build Coastguard WorkerRun image: 109*cc02d7e2SAndroid Build Coastguard Worker```sh 110*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm grpc-gcc7/centos 111*cc02d7e2SAndroid Build Coastguard Worker``` 112*cc02d7e2SAndroid Build Coastguard Worker 113*cc02d7e2SAndroid Build Coastguard Worker### `php-src` 114*cc02d7e2SAndroid Build Coastguard Worker 115*cc02d7e2SAndroid Build Coastguard WorkerInstead of using a general purpose base docker image provided by PHP, here we 116*cc02d7e2SAndroid Build Coastguard Workercompile PHP itself from 117*cc02d7e2SAndroid Build Coastguard Worker[source](https://github.com/php/php-src). This will allow us to change some 118*cc02d7e2SAndroid Build Coastguard Worker`configure` options, like `--enable-debug`. Then we proceed to build the full 119*cc02d7e2SAndroid Build Coastguard Worker`grpc` PECL extension and run the unit tests. 120*cc02d7e2SAndroid Build Coastguard Worker 121*cc02d7e2SAndroid Build Coastguard WorkerBuild `php-src` docker image: 122*cc02d7e2SAndroid Build Coastguard Worker```sh 123*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc 124*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/php-src -f ./src/php/docker/php-src/Dockerfile . 125*cc02d7e2SAndroid Build Coastguard Worker``` 126*cc02d7e2SAndroid Build Coastguard Worker 127*cc02d7e2SAndroid Build Coastguard WorkerRun image: 128*cc02d7e2SAndroid Build Coastguard Worker```sh 129*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm grpc-php/php-src 130*cc02d7e2SAndroid Build Coastguard Worker``` 131*cc02d7e2SAndroid Build Coastguard Worker 132*cc02d7e2SAndroid Build Coastguard Worker### `php-zts` 133*cc02d7e2SAndroid Build Coastguard Worker 134*cc02d7e2SAndroid Build Coastguard WorkerThis image builds the `grpc` extension against the current PHP version with ZTS 135*cc02d7e2SAndroid Build Coastguard Workerenabled. 136*cc02d7e2SAndroid Build Coastguard Worker 137*cc02d7e2SAndroid Build Coastguard WorkerBuild `php-zts` docker image: 138*cc02d7e2SAndroid Build Coastguard Worker```sh 139*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc 140*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/php-zts -f ./src/php/docker/php-zts/Dockerfile . 141*cc02d7e2SAndroid Build Coastguard Worker``` 142*cc02d7e2SAndroid Build Coastguard Worker 143*cc02d7e2SAndroid Build Coastguard WorkerRun image: 144*cc02d7e2SAndroid Build Coastguard Worker```sh 145*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm grpc-php/php-zts 146*cc02d7e2SAndroid Build Coastguard Worker``` 147*cc02d7e2SAndroid Build Coastguard Worker 148*cc02d7e2SAndroid Build Coastguard Worker### `php-future` 149*cc02d7e2SAndroid Build Coastguard Worker 150*cc02d7e2SAndroid Build Coastguard WorkerThis image builds the `grpc` extension against the next future PHP version 151*cc02d7e2SAndroid Build Coastguard Workercurrently in alpha, beta or release candidate stage. 152*cc02d7e2SAndroid Build Coastguard Worker 153*cc02d7e2SAndroid Build Coastguard WorkerBuild `php-future` docker image: 154*cc02d7e2SAndroid Build Coastguard Worker```sh 155*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc 156*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/php-future -f ./src/php/docker/php-future/Dockerfile . 157*cc02d7e2SAndroid Build Coastguard Worker``` 158*cc02d7e2SAndroid Build Coastguard Worker 159*cc02d7e2SAndroid Build Coastguard WorkerRun image: 160*cc02d7e2SAndroid Build Coastguard Worker```sh 161*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm grpc-php/php-future 162*cc02d7e2SAndroid Build Coastguard Worker``` 163*cc02d7e2SAndroid Build Coastguard Worker### `php5` 164*cc02d7e2SAndroid Build Coastguard Worker 165*cc02d7e2SAndroid Build Coastguard WorkerNOTE: PHP 5.x has reached the end-of-life state and is no longer supported. 166*cc02d7e2SAndroid Build Coastguard Worker 167*cc02d7e2SAndroid Build Coastguard Worker 168*cc02d7e2SAndroid Build Coastguard Worker### `fork-support` 169*cc02d7e2SAndroid Build Coastguard Worker 170*cc02d7e2SAndroid Build Coastguard WorkerThis image tests `pcntl_fork()` support and makes sure scripts using 171*cc02d7e2SAndroid Build Coastguard Worker`pcntl_fork()` don't freeze or crash. 172*cc02d7e2SAndroid Build Coastguard Worker 173*cc02d7e2SAndroid Build Coastguard WorkerBuild `grpc-ext` docker image: 174*cc02d7e2SAndroid Build Coastguard Worker```sh 175*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc 176*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/fork-support -f ./src/php/docker/fork-support/Dockerfile . 177*cc02d7e2SAndroid Build Coastguard Worker``` 178*cc02d7e2SAndroid Build Coastguard Worker 179*cc02d7e2SAndroid Build Coastguard WorkerRun image: 180*cc02d7e2SAndroid Build Coastguard Worker```sh 181*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm grpc-php/fork-support 182*cc02d7e2SAndroid Build Coastguard Worker```