mirror of
https://github.com/danog/docker-php-extension-installer.git
synced 2024-12-12 17:37:34 +01:00
0c47469758
`chmod +x` gets the same result that `chmod a+x` and `chmod uga+x`. Classes of users are used to distinguish to whom the permissions apply. If no classes are specified "all" is implied. The classes are represented by one or more of the following letters: Reference Class Description u user file owner g group members of the file's group o others users who are neither the file's owner nor members of the file's group a all all three of the above, same as ugo
272 lines
14 KiB
Markdown
272 lines
14 KiB
Markdown
[![Test recent](https://github.com/mlocati/docker-php-extension-installer/workflows/Test%20recent/badge.svg)](https://github.com/mlocati/docker-php-extension-installer/actions?query=workflow%3A%22Test+recent%22)
|
|
|
|
# Easy installation of PHP extensions in official PHP Docker images
|
|
|
|
This repository contains a script that can be used to easily install a PHP extension inside the [official PHP Docker images](https://hub.docker.com/_/php/).
|
|
|
|
The script will install all the required APT/APK packages; at the end of the script execution, the no-more needed packages will be removed so that the image will be much smaller.
|
|
|
|
Supported docker images are all the Alpine/Debian versions, except for PHP 5.5 where we only support Debian 8 (jessie) (that is, `php:5.5`, `php:5.5-apache`, `php:5.5-cli`, `php:5.5-fpm`, `php:5.5-zts`).
|
|
See also the notes in the [Special requirements](#special-requirements) section.
|
|
|
|
|
|
## Usage
|
|
|
|
You have two ways to use this script within your `Dockerfile`s: you can download the script on the fly, or you can grab it from the [`mlocati/php-extension-installer` Docker Hub image](https://hub.docker.com/r/mlocati/php-extension-installer).
|
|
With the first method you are sure you'll always get the very latest version of the script, with the second method the process is faster since you'll use a local image.
|
|
|
|
For example, here are two `Dockerfile`s that install the GD and xdebug PHP extensions:
|
|
|
|
### Downloading the script on the fly
|
|
|
|
```Dockerfile
|
|
FROM php:7.2-cli
|
|
|
|
ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/
|
|
|
|
RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
|
|
install-php-extensions gd xdebug
|
|
```
|
|
|
|
### Copying the script from a Docker image
|
|
|
|
```Dockerfile
|
|
FROM php:7.2-cli
|
|
|
|
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/
|
|
|
|
RUN install-php-extensions gd xdebug
|
|
```
|
|
|
|
## Supported PHP extensions
|
|
|
|
<!-- START OF EXTENSIONS TABLE -->
|
|
<!-- ########################################################### -->
|
|
<!-- # # -->
|
|
<!-- # DO NOT EDIT THIS TABLE: IT IS GENERATED AUTOMATICALLY # -->
|
|
<!-- # # -->
|
|
<!-- # EDIT THE data/supported-extensions FILE INSTEAD # -->
|
|
<!-- # # -->
|
|
<!-- ########################################################### -->
|
|
| Extension | PHP 5.5 | PHP 5.6 | PHP 7.0 | PHP 7.1 | PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 |
|
|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|
| amqp | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| apcu | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| apcu_bc | | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| bcmath | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| bz2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| calendar | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| cmark | | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| dba | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| decimal | | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| enchant[*](#special-requirements-for-enchant) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| exif | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| ffi | | | | | | | ✓ | ✓ |
|
|
| gd | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| gettext | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| gmagick | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| gmp | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| grpc | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| http | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| igbinary | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| imagick | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| imap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| interbase | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | |
|
|
| intl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| ldap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| mailparse | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| mcrypt | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| memcache | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| memcached | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| mongo | ✓ | ✓ | | | | | | |
|
|
| mongodb | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| msgpack | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| mssql | ✓ | ✓ | | | | | | |
|
|
| mysql | ✓ | ✓ | | | | | | |
|
|
| mysqli | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| oauth | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| odbc | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| opcache | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| opencensus | | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| parallel[*](#special-requirements-for-parallel) | | | | ✓ | ✓ | ✓ | ✓ | |
|
|
| pcntl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| pcov | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| pdo_dblib | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| pdo_firebird | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| pdo_mysql | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| pdo_odbc | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| pdo_pgsql | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| pdo_sqlsrv | | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| pgsql | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| propro | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| protobuf | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| pspell | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| pthreads[*](#special-requirements-for-pthreads) | ✓ | ✓ | ✓ | | | | | |
|
|
| raphf | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| rdkafka | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| recode | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | |
|
|
| redis | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| shmop | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| snmp | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| snuffleupagus | | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| soap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| sockets | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| solr | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| sqlsrv | | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| ssh2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| sybase_ct | ✓ | ✓ | | | | | | |
|
|
| sysvmsg | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| sysvsem | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| sysvshm | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| tdlib[*](#special-requirements-for-tdlib) | | | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| tidy | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| timezonedb | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| uopz | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| uuid | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| wddx | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | |
|
|
| xdebug | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| xhprof | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| xmlrpc | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| xsl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| yaml | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
| zip | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
|
| zookeeper | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
|
|
|
|
*Number of supported extensions: 81*
|
|
<!-- END OF EXTENSIONS TABLE -->
|
|
|
|
PS: the pre-installed PHP extensions are excluded from this list.
|
|
You can list them with the following command (change `php:7.2-cli` to reflect the PHP version you are interested in):
|
|
|
|
```
|
|
$ docker run --rm php:7.2-cli php -m
|
|
[PHP Modules]
|
|
Core
|
|
ctype
|
|
curl
|
|
date
|
|
dom
|
|
fileinfo
|
|
filter
|
|
ftp
|
|
hash
|
|
iconv
|
|
json
|
|
libxml
|
|
mbstring
|
|
mysqlnd
|
|
openssl
|
|
pcre
|
|
PDO
|
|
pdo_sqlite
|
|
Phar
|
|
posix
|
|
readline
|
|
Reflection
|
|
session
|
|
SimpleXML
|
|
sodium
|
|
SPL
|
|
sqlite3
|
|
standard
|
|
tokenizer
|
|
xml
|
|
xmlreader
|
|
xmlwriter
|
|
zlib
|
|
|
|
[Zend Modules]
|
|
```
|
|
|
|
## Special requirements
|
|
|
|
Some extension has special requirements:
|
|
|
|
<!-- START OF SPECIAL REQUIREMENTS -->
|
|
<!-- ########################################################### -->
|
|
<!-- # # -->
|
|
<!-- # DO NOT EDIT THIS TABLE: IT IS GENERATED AUTOMATICALLY # -->
|
|
<!-- # # -->
|
|
<!-- # EDIT THE data/special-requirements FILE INSTEAD # -->
|
|
<!-- # # -->
|
|
<!-- ########################################################### -->
|
|
| Extension | Requirements |
|
|
|---|---|
|
|
| <a name="special-requirements-for-enchant"></a>enchant | • Not available in `7.2-alpine3.12` docker images<br />• Not available in `7.3-alpine3.12` docker images<br />• Not available in `7.4-alpine3.12` docker images |
|
|
| <a name="special-requirements-for-parallel"></a>parallel | Requires images with PHP compiled with thread-safety enabled (`zts`). |
|
|
| <a name="special-requirements-for-pthreads"></a>pthreads | Requires images with PHP compiled with thread-safety enabled (`zts`). |
|
|
| <a name="special-requirements-for-tdlib"></a>tdlib | • Not available in `alpine3.7` docker images<br />• Not available in `jessie` docker images |
|
|
<!-- END OF SPECIAL REQUIREMENTS -->
|
|
|
|
|
|
## Tests
|
|
|
|
When submitting a pull request, a [GitHub Action](https://github.com/mlocati/docker-php-extension-installer/blob/master/.github/workflows/test-extensions.yml) is executed to check if affected PHP extensions actually work (see below).
|
|
|
|
Furthermore, we also check that new versions of extensions in the PECL repository will still work.
|
|
This is done on a scheduled basis with another [GitHub Action](https://github.com/mlocati/docker-php-extension-installer/blob/master/.github/workflows/test-recent-extensions.yml).
|
|
In case of failure, a message is sent to a [Telegram Channel](https://t.me/docker_php_extension_installer).
|
|
Feel free to subscribe to it to receive failure notifications.
|
|
|
|
|
|
## How to contribute
|
|
|
|
### Formatting code
|
|
|
|
Before submitting any pull request, be sure to execute the `lint` script in the `scripts` directory (or `lint.bat` on Windows).
|
|
|
|
### Adding support to a new PHP extension?
|
|
|
|
1. change the `install-php-extensions` script
|
|
2. update the `data/supported-extensions` file, adding a new line with the handle of the extension and the list of supported PHP versions
|
|
3. if the extension requires ZTS images:
|
|
add a new line to the `data/special-requirements` file, with the extension handle followed by a space and `zts`
|
|
|
|
See [this pull request](https://github.com/mlocati/docker-php-extension-installer/pull/60) for an example.
|
|
|
|
### Changing the supported PHP versions for an already supported PHP extension?
|
|
|
|
1. change the `install-php-extensions` script
|
|
2. update the `data/supported-extensions` file, adding the new PHP version to the existing line corresponding to the updated extension
|
|
|
|
See [this pull request](https://github.com/mlocati/docker-php-extension-installer/pull/62) for an example.
|
|
|
|
### Improving code for an already supported extension?
|
|
|
|
If you change some code that affects one or more extensions, please add a line with `Test: extension1, extension2` to the message of one of the pull request commits.
|
|
That way, the test jobs will check the extension even if you don't touch the `data/supported-extensions` file.
|
|
|
|
Here's an example of a commit message:
|
|
|
|
```
|
|
Improve the GD and ZIP extensions
|
|
|
|
Test: gd, zip
|
|
```
|
|
|
|
Tests only check the installation of a single PHP extension at a time.
|
|
If you want to test installing more PHP extensions at the same time, use a commit message like this:
|
|
|
|
```
|
|
Improve the GD and ZIP extensions
|
|
|
|
Test: gd+zip
|
|
```
|
|
|
|
|
|
If your pull request contains multiple commits, we'll check the "Test:" message of every commit.
|
|
If you want to stop parsing next commits, add `-STOP-` in the "Test:" line, for example:
|
|
|
|
```
|
|
Improve the GD and ZIP extensions
|
|
|
|
Test: gd, zip, -STOP-
|
|
```
|
|
|
|
See [this pull request](https://github.com/mlocati/docker-php-extension-installer/pull/43) for an example.
|
|
|
|
|
|
## Do you want to really say thank you?
|
|
|
|
You can offer me a [monthly coffee](https://github.com/sponsors/mlocati) or a [one-time coffee](https://paypal.me/mlocati) :wink:
|