-
Notifications
You must be signed in to change notification settings - Fork 110
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add images with PCOV coverage extension installed
- Loading branch information
Showing
3 changed files
with
194 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
ARG BASE_IMAGE=chialab/php:latest | ||
FROM ${BASE_IMAGE} | ||
LABEL maintainer="[email protected]" | ||
|
||
# Install PCOV. | ||
RUN install-php-extensions pcov |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
SHELL := /bin/bash | ||
ALL: build | ||
.PHONY: build test push | ||
|
||
PARENT_IMAGE := chialab/php | ||
IMAGE := chialab/php-dev | ||
VERSION ?= latest | ||
PHP_VERSION = $(firstword $(subst -, ,$(VERSION))) | ||
|
||
# Extensions. | ||
EXTENSIONS := \ | ||
amqp \ | ||
bcmath \ | ||
bz2 \ | ||
calendar \ | ||
event \ | ||
exif \ | ||
gd \ | ||
gettext \ | ||
iconv \ | ||
imagick \ | ||
intl \ | ||
ldap \ | ||
mbstring \ | ||
memcached \ | ||
mysqli \ | ||
OPcache \ | ||
pcov \ | ||
pdo_mysql \ | ||
pdo_pgsql \ | ||
pgsql \ | ||
redis \ | ||
soap \ | ||
xsl \ | ||
zip \ | ||
sockets | ||
ifeq (,$(findstring $(PHP_VERSION), 7.2 7.3 7.4 8.0 8.1 latest)) | ||
# Add more extensions to PHP < 7.2. | ||
EXTENSIONS += mcrypt | ||
endif | ||
|
||
build: | ||
@echo " =====> Building $(REGISTRY)$(IMAGE):$(VERSION)..." | ||
docker image build --quiet --build-arg 'BASE_IMAGE=$(PARENT_IMAGE):$(VERSION)' -t $(REGISTRY)$(IMAGE):$(VERSION) . | ||
|
||
test: | ||
@echo -e "=====> Testing loaded extensions... \c" | ||
@if [[ -z `docker image ls $(REGISTRY)$(IMAGE) | grep "\s$(VERSION)\s"` ]]; then \ | ||
echo 'FAIL [Missing image!!!]'; \ | ||
exit 1; \ | ||
fi | ||
@IMAGE_PHP_VERSION=`docker container run --rm $(REGISTRY)$(IMAGE):$(VERSION) bash -c '/bin/echo $$PHP_VERSION' | cut -d '.' -f 1,2`; \ | ||
if [[ "$(PHP_VERSION)" != "latest" && "$${IMAGE_PHP_VERSION}" != "$(PHP_VERSION)" ]]; then \ | ||
echo "FAIL [wrong PHP version: expected $(PHP_VERSION), got $${IMAGE_PHP_VERSION}]"; \ | ||
exit 1; \ | ||
fi | ||
@modules=`docker container run --rm $(REGISTRY)$(IMAGE):$(VERSION) php -m`; \ | ||
for ext in $(EXTENSIONS); do \ | ||
if [[ "$${modules}" != *"$${ext}"* ]]; then \ | ||
echo "FAIL [$${ext}]"; \ | ||
exit 1; \ | ||
fi \ | ||
done | ||
@if [[ "$(VERSION)" == *'-apache' ]]; then \ | ||
apache=`docker container run --rm $(REGISTRY)$(IMAGE):$(VERSION) apache2ctl -M 2> /dev/null`; \ | ||
if [[ "$${apache}" != *'rewrite_module'* ]]; then \ | ||
echo 'FAIL [mod_rewrite]'; \ | ||
exit 1; \ | ||
fi \ | ||
fi | ||
@if [[ -z `docker container run --rm $(REGISTRY)$(IMAGE):$(VERSION) composer --version 2> /dev/null | grep '^Composer version 2\.[0-9][0-9]*'` ]]; then \ | ||
echo 'FAIL [Composer 2]'; \ | ||
exit 1; \ | ||
fi | ||
@if [[ -z `docker container run --rm $(REGISTRY)$(IMAGE):$(VERSION) composer2 --version 2> /dev/null | grep '^Composer version 2\.[0-9][0-9]*'` ]]; then \ | ||
echo 'FAIL [Composer 2]'; \ | ||
exit 1; \ | ||
fi | ||
@if [[ -z `docker container run --rm $(REGISTRY)$(IMAGE):$(VERSION) composer1 --version 2> /dev/null | grep '^Composer version 1\.[0-9][0-9]*'` ]]; then \ | ||
echo 'FAIL [Composer 1]'; \ | ||
exit 1; \ | ||
fi | ||
@if [[ -z `docker container run --rm $(REGISTRY)$(IMAGE):$(VERSION) composer1 global show 2> /dev/null | grep '^hirak/prestissimo [0-9][0-9]*\.[0-9][0-9]*'` ]]; then \ | ||
echo 'FAIL [Composer 1 plugin - prestissimo]'; \ | ||
exit 1; \ | ||
fi | ||
@echo 'OK' | ||
|
||
push: | ||
docker image push $(REGISTRY)$(IMAGE):$(VERSION) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
<p align="center"> | ||
<a href="https://www.chialab.io/p/docker-php"> | ||
<img alt="Docker PHP Images logo" width="144" height="144" src="https://raw.githack.com/chialab/docker-php/master/logo.svg" /> | ||
</a> | ||
</p> | ||
|
||
<p align="center"> | ||
<strong>Docker PHP images</strong> | ||
</p> | ||
|
||
<p align="center"> | ||
<a href="https://github.com/chialab/docker-php/actions"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/workflow/status/chialab/docker-php/Build,%20test%20and%20publish%20images?style=flat-square"></a> | ||
<a href="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/chialab/docker-php"><img alt="Source link" src="https://img.shields.io/badge/Source-GitHub-lightgrey.svg?style=flat-square"></a> | ||
<a href="https://www.chialab.it"><img alt="Authors link" src="https://img.shields.io/badge/Authors-Chialab-lightgrey.svg?style=flat-square"></a> | ||
<a href="https://hub.docker.com/r/chialab/php-pcov/"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/chialab/php-pcov.svg?style=flat-square"></a> | ||
<a href="https://github.com/chialab/docker-php/blob/master/LICENSE"><img alt="License" src="https://img.shields.io/github/license/chialab/docker-php.svg?style=flat-square"></a> | ||
</p> | ||
|
||
--- | ||
|
||
Docker images built on top of the [official PHP images](https://hub.docker.com/r/_/php/) with the addition of some common and useful extensions, installed with [mlocati/docker-php-extension-installer](https://github.com/mlocati/docker-php-extension-installer), and are meant for *continuout integration purposes*. You can find these images on the [Docker Hub](https://hub.docker.com/r/chialab/php-pcov/) (and if you're reading this file, you're probably already there). | ||
|
||
An automated build is set up, so they should be always up-to-date with the Dockerfiles in the [GitHub repository](https://github.com/chialab/docker-php). Also, every time an official PHP image is updated, a rebuild is triggered, so that you will always find the latest security patches installed in these images. | ||
|
||
For more production-like environments, you might want to choose an [image *without* PCOV installed](https://hub.docker.com/r/chialab/php/), instead. | ||
|
||
## Available tags | ||
- `latest` | ||
- `7.1` | ||
- `7.1-apache` | ||
- `7.1-fpm` | ||
- `7.2` | ||
- `7.2-apache` | ||
- `7.2-fpm` | ||
- `7.3` | ||
- `7.3-apache` | ||
- `7.3-fpm` | ||
- `7.4` | ||
- `7.4-apache` | ||
- `7.4-fpm` | ||
- `8.0` | ||
- `8.0-apache` | ||
- `8.0-fpm` | ||
- `8.1` | ||
- `8.1-apache` | ||
- `8.1-fpm` | ||
|
||
As you might have guessed, all tags are built on top of the corresponding tag of the official image. Not all tags are supported in order to easen maintenance. | ||
|
||
## Installed extensions | ||
The following modules and extensions have been enabled, | ||
in addition to those you can already find in the [official PHP image](https://hub.docker.com/r/_/php/): | ||
|
||
- `amqp` | ||
- `bcmath` | ||
- `bz2` | ||
- `calendar` | ||
- `event` | ||
- `exif` | ||
- `gd` | ||
- `gettext` | ||
- `iconv` | ||
- `imagick` | ||
- `intl` | ||
- `ldap` | ||
- `mbstring` | ||
- `mcrypt` (_only PHP ≤ 7.1_) | ||
- `memcached` | ||
- `mysql` (_only PHP 5.x_) | ||
- `mysqli` | ||
- `pcov` | ||
- `pdo_mysql` | ||
- `pdo_pgsql` | ||
- `pgsql` | ||
- `redis` | ||
- `soap` | ||
- `sockets` | ||
- `xsl` | ||
- `Zend OPcache` | ||
- `zip` | ||
|
||
You will probably not need all this stuff. Even if having some extra extensions loaded ain't a big issue in most cases (especially in a development environment), you will very likely want to checkout this repository, remove unwanted extensions from the `Dockerfile`, and build your own image — for sometimes removing is easier than adding. 😉 | ||
|
||
## Composer | ||
[Composer](https://getcomposer.org) is installed globally in all images. Please, refer to their documentation for usage hints. | ||
Since 2020/11/01 both version 1 and 2 are installed, available through `composer1` and `composer2` commands respectively (`composer` in now a symlink to `composer2`). | ||
[Prestissimo (composer plugin)](https://github.com/hirak/prestissimo) is installed globally in all images, for use with Composer version 1. It's a plugin that downloads packages in parallel to speed up the installation process of Composer packages. | ||
|
||
## Contributing | ||
If you find an issue, or have a special wish not yet fulfilled, please [open an issue on GitHub](https://github.com/chialab/docker-php/issues) providing as many details as you can (the more you are specific about your problem, the easier it is for us to fix it). | ||
|
||
Pull requests are welcome, too! 😁 Please, run `make build` and `make test` before attempting a pull request. Also, it would be nice if you could stick to the [best practices for writing Dockerfiles](https://docs.docker.com/articles/dockerfile_best-practices/). | ||
|
||
--- | ||
|
||
## License | ||
|
||
Docker PHP Images is released under the [MIT](https://github.com/chialab/docker-php/blob/master/LICENSE) license. |