mirror of
https://github.com/chialab/docker-php.git
synced 2026-08-24 10:13:24 -05:00
add image with open-telemetry PHP extension
This commit is contained in:
@@ -101,3 +101,16 @@ jobs:
|
|||||||
chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }}
|
chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }}
|
||||||
ghcr.io/chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }}
|
ghcr.io/chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }}
|
||||||
push: true
|
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 }}
|
chialab/php-xhprof:${{ matrix.version }}
|
||||||
ghcr.io/chialab/php-xhprof:${{ matrix.version }}
|
ghcr.io/chialab/php-xhprof:${{ matrix.version }}
|
||||||
push: true
|
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/
|
REGISTRY: localhost:5000/
|
||||||
VERSION: ${{ matrix.version }}${{ matrix.flavor }}
|
VERSION: ${{ matrix.version }}${{ matrix.flavor }}
|
||||||
run: 'docker pull localhost:5000/chialab/php-xhprof:${{ matrix.version }}${{ matrix.flavor }} && make -C xhprof test'
|
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/
|
REGISTRY: localhost:5000/
|
||||||
VERSION: ${{ matrix.version }}
|
VERSION: ${{ matrix.version }}
|
||||||
run: 'docker pull localhost:5000/chialab/php-xhprof:${{ matrix.version }} && make -C xhprof test'
|
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'
|
||||||
|
|||||||
@@ -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.
|
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.
|
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
|
## 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`
|
||||||
- `8.4-apache`
|
- `8.4-apache`
|
||||||
- `8.4-fpm`
|
- `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.
|
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,6 @@
|
|||||||
|
ARG BASE_IMAGE=chialab/php:latest
|
||||||
|
FROM ${BASE_IMAGE}
|
||||||
|
LABEL maintainer="dev@chialab.io"
|
||||||
|
|
||||||
|
# Install OpenTelemetry.
|
||||||
|
RUN install-php-extensions protobuf opentelemetry-php/ext-opentelemetry@1.3.1
|
||||||
@@ -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