mirror of
https://github.com/chialab/docker-php.git
synced 2026-08-24 02:24:16 -05:00
Merge pull request #137 from chialab/otel-image
add image with open-telemetry PHP extension
This commit is contained in:
@@ -101,3 +101,16 @@ jobs:
|
||||
chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }}
|
||||
ghcr.io/chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }}
|
||||
push: true
|
||||
|
||||
- name: Build OTel image and push to registry
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64
|
||||
cache-to: type=inline
|
||||
context: ./otel
|
||||
build-args: |
|
||||
BASE_IMAGE=ghcr.io/chialab/php:${{ matrix.version }}${{ matrix.flavor }}
|
||||
tags: |
|
||||
chialab/php-otel:${{ matrix.version }}${{ matrix.flavor }}
|
||||
ghcr.io/chialab/php-otel:${{ matrix.version }}${{ matrix.flavor }}
|
||||
push: true
|
||||
|
||||
@@ -100,3 +100,16 @@ jobs:
|
||||
chialab/php-xhprof:${{ matrix.version }}
|
||||
ghcr.io/chialab/php-xhprof:${{ matrix.version }}
|
||||
push: true
|
||||
|
||||
- name: Build OTel image and push to registry
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
platforms: linux/amd64,linux/arm64
|
||||
cache-to: type=inline
|
||||
context: ./otel
|
||||
build-args: |
|
||||
BASE_IMAGE=ghcr.io/chialab/php:${{ matrix.version }}
|
||||
tags: |
|
||||
chialab/php-otel:${{ matrix.version }}
|
||||
ghcr.io/chialab/php-otel:${{ matrix.version }}
|
||||
push: true
|
||||
|
||||
@@ -98,3 +98,19 @@ jobs:
|
||||
REGISTRY: localhost:5000/
|
||||
VERSION: ${{ matrix.version }}${{ matrix.flavor }}
|
||||
run: 'docker pull localhost:5000/chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }} && make -C xhprof test'
|
||||
|
||||
- name: Build OTel image for testing
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
cache-to: type=inline
|
||||
context: ./otel
|
||||
build-args: |
|
||||
BASE_IMAGE=localhost:5000/chialab/php:${{ matrix.version }}${{ matrix.flavor }}
|
||||
tags: localhost:5000/chialab/php-otel:${{ matrix.version }}${{ matrix.flavor }}
|
||||
push: true
|
||||
|
||||
- name: Test OTel image
|
||||
env:
|
||||
REGISTRY: localhost:5000/
|
||||
VERSION: ${{ matrix.version }}${{ matrix.flavor }}
|
||||
run: 'docker pull localhost:5000/chialab/php-otel:${{ matrix.version }}${{ matrix.flavor }} && make -C otel test'
|
||||
|
||||
@@ -97,3 +97,19 @@ jobs:
|
||||
REGISTRY: localhost:5000/
|
||||
VERSION: ${{ matrix.version }}
|
||||
run: 'docker pull localhost:5000/chialab/php-xhprof:${{ matrix.version }} && make -C xhprof test'
|
||||
|
||||
- name: Build OTel image for testing
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
cache-to: type=inline
|
||||
context: ./otel
|
||||
build-args: |
|
||||
BASE_IMAGE=localhost:5000/chialab/php:${{ matrix.version }}
|
||||
tags: localhost:5000/chialab/php-otel:${{ matrix.version }}
|
||||
push: true
|
||||
|
||||
- name: Test OTel image
|
||||
env:
|
||||
REGISTRY: localhost:5000/
|
||||
VERSION: ${{ matrix.version }}
|
||||
run: 'docker pull localhost:5000/chialab/php-otel:${{ matrix.version }} && make -C otel test'
|
||||
|
||||
+10
-1
@@ -51,7 +51,16 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update -q \
|
||||
5.6.*) PHP_EXTENSIONS="$PHP_EXTENSIONS mcrypt mysql";; \
|
||||
7.0.*|7.1.*) PHP_EXTENSIONS="$PHP_EXTENSIONS mcrypt";; \
|
||||
esac \
|
||||
&& install-php-extensions $PHP_EXTENSIONS \
|
||||
# On PHP Debian 9 (Stretch) amqp has a dependency on libssh-dev, which pulls in
|
||||
# libssl1.0-dev, which conflicts with the libssl-dev version (1.1.0) needed by the
|
||||
# other extensions. Installing amqp on its own so that install-php-extensions
|
||||
# purges libssl1.0-dev before libssl-dev is installed for the rest.
|
||||
&& if [ "${PHP_VERSION%%.*}" = "7" ]; then \
|
||||
install-php-extensions amqp \
|
||||
&& install-php-extensions $(echo "$PHP_EXTENSIONS" | sed 's/amqp//'); \
|
||||
else \
|
||||
install-php-extensions $PHP_EXTENSIONS; \
|
||||
fi \
|
||||
&& if command -v a2enmod; then a2enmod rewrite; fi
|
||||
|
||||
# Install Composer.
|
||||
|
||||
@@ -12,6 +12,8 @@ An automated build is set up, so they should be always up-to-date with the Docke
|
||||
|
||||
For development environments, you might want to choose an [image with XDebug installed](https://hub.docker.com/r/chialab/php-dev/), or [one with XHProf](https://hub.docker.com/r/chialab/php-xhprof/), or another [with PCOV installed](https://hub.docker.com/r/chialab/php-pcov/), instead.
|
||||
|
||||
If you use Open Telemetry in your project, you may be interested in an [image with the OTel PHP extension](https://hub.docker.com/r/chialab/php-otel/).
|
||||
|
||||
If you are really desperate and need PHP 5.6 with support for MySQL 8.x, check the [php-compat](https://hub.docker.com/r/chialab/php-compat/) image.
|
||||
|
||||
## Available tags
|
||||
@@ -49,6 +51,9 @@ If you are really desperate and need PHP 5.6 with support for MySQL 8.x, check t
|
||||
- `8.4`
|
||||
- `8.4-apache`
|
||||
- `8.4-fpm`
|
||||
- `8.5`
|
||||
- `8.5-apache`
|
||||
- `8.5-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.
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
ARG BASE_IMAGE=chialab/php:latest
|
||||
FROM ${BASE_IMAGE}
|
||||
LABEL maintainer="dev@chialab.io"
|
||||
|
||||
RUN if [ "$(echo "$PHP_VERSION" | cut -d. -f1,2)" = "8.0" ]; then \
|
||||
install-php-extensions protobuf opentelemetry-php/ext-opentelemetry@1.1.3; \
|
||||
else \
|
||||
install-php-extensions protobuf opentelemetry-php/ext-opentelemetry@1.3.1; \
|
||||
fi
|
||||
@@ -0,0 +1,80 @@
|
||||
SHELL := /bin/bash
|
||||
ALL: build
|
||||
.PHONY: build test push
|
||||
|
||||
PARENT_IMAGE := chialab/php
|
||||
IMAGE := chialab/php-otel
|
||||
VERSION ?= latest
|
||||
PHP_VERSION = $(firstword $(subst -, ,$(VERSION)))
|
||||
PHP_MAJOR := $(shell echo $(PHP_VERSION) | grep -oE '^[0-9]+')
|
||||
ifneq ($(PHP_MAJOR),)
|
||||
ifeq ($(shell [ $(PHP_MAJOR) -lt 8 ] && echo yes),yes)
|
||||
$(error PHP_VERSION '$(PHP_VERSION)' is not supported: this image requires PHP >= 8.0)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Extensions.
|
||||
EXTENSIONS := \
|
||||
amqp \
|
||||
bcmath \
|
||||
bz2 \
|
||||
calendar \
|
||||
event \
|
||||
exif \
|
||||
gd \
|
||||
gettext \
|
||||
iconv \
|
||||
imagick \
|
||||
intl \
|
||||
ldap \
|
||||
mbstring \
|
||||
memcached \
|
||||
mysqli \
|
||||
OPcache \
|
||||
opentelemetry \
|
||||
pdo_mysql \
|
||||
pdo_pgsql \
|
||||
pgsql \
|
||||
redis \
|
||||
soap \
|
||||
xsl \
|
||||
zip \
|
||||
sockets
|
||||
|
||||
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) sh -c '/bin/echo $$PHP_VERSION' | cut -d '.' -f 1,2`; \
|
||||
if [[ "$(PHP_VERSION)" != "latest" && "$(PHP_VERSION)" != "alpine" && "$${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]'; \
|
||||
exit 1; \
|
||||
fi
|
||||
@echo 'OK'
|
||||
|
||||
push:
|
||||
docker image push $(REGISTRY)$(IMAGE):$(VERSION)
|
||||
@@ -0,0 +1,93 @@
|
||||
<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/actions/workflow/status/chialab/docker-php/main.yml?branch=main&style=flat-square"></a>
|
||||
<a href="https://github.com/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-otel/"><img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/chialab/php-otel.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-otel/) (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.
|
||||
|
||||
## Available tags
|
||||
- `latest`
|
||||
- `8.0`
|
||||
- `8.0-apache`
|
||||
- `8.0-fpm`
|
||||
- `8.1`
|
||||
- `8.1-apache`
|
||||
- `8.1-fpm`
|
||||
- `8.2`
|
||||
- `8.2-apache`
|
||||
- `8.2-fpm`
|
||||
- `8.3`
|
||||
- `8.3-apache`
|
||||
- `8.3-fpm`
|
||||
- `8.4`
|
||||
- `8.4-apache`
|
||||
- `8.4-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`
|
||||
- `opentelemetry`
|
||||
- `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.
|
||||
Reference in New Issue
Block a user