mirror of
https://github.com/chialab/docker-php.git
synced 2026-08-24 10:13:24 -05:00
261 lines
8.1 KiB
Docker
261 lines
8.1 KiB
Docker
#
|
|
# This is taken from the official PHP image's Dockerfile (https://github.com/docker-library/php/tree/783878384a8f3953ed571e5a34ba0fe546726c85)
|
|
# and slightly fixed to work in this day and age.
|
|
#
|
|
|
|
FROM debian:stretch-slim
|
|
|
|
LABEL maintainer="dev@chialab.io"
|
|
|
|
# Fix Debian 9 (Stretch) source list, because it has been moved to archive, and update packages.
|
|
RUN sed -i -e 's/deb.debian.org/archive.debian.org/g' \
|
|
-e 's/security.debian.org/archive.debian.org/g' \
|
|
-e '/stretch-updates/d' /etc/apt/sources.list \
|
|
&& apt-get update && apt-get upgrade -y
|
|
|
|
# prevent Debian's PHP packages from being installed
|
|
# https://github.com/docker-library/php/pull/542
|
|
RUN set -eux; \
|
|
{ \
|
|
echo 'Package: php*'; \
|
|
echo 'Pin: release *'; \
|
|
echo 'Pin-Priority: -1'; \
|
|
} > /etc/apt/preferences.d/no-debian-php
|
|
|
|
# dependencies required for running "phpize"
|
|
# (see persistent deps below)
|
|
ENV PHPIZE_DEPS \
|
|
autoconf \
|
|
dpkg-dev \
|
|
file \
|
|
g++ \
|
|
gcc \
|
|
libc-dev \
|
|
make \
|
|
pkg-config \
|
|
re2c
|
|
|
|
# persistent / runtime deps
|
|
RUN apt-get update && apt-get install -y \
|
|
$PHPIZE_DEPS \
|
|
ca-certificates \
|
|
curl \
|
|
xz-utils \
|
|
--no-install-recommends && rm -r /var/lib/apt/lists/*
|
|
|
|
ENV PHP_INI_DIR /usr/local/etc/php
|
|
RUN mkdir -p $PHP_INI_DIR/conf.d
|
|
|
|
##<autogenerated>##
|
|
##</autogenerated>##
|
|
|
|
# Apply stack smash protection to functions using local buffers and alloca()
|
|
# Make PHP's main executable position-independent (improves ASLR security mechanism, and has no performance impact on x86_64)
|
|
# Enable optimization (-O2)
|
|
# Enable linker optimization (this sorts the hash buckets to improve cache locality, and is non-default)
|
|
# Adds GNU HASH segments to generated executables (this is used if present, and is much faster than sysv hash; in this configuration, sysv hash is also generated)
|
|
# https://github.com/docker-library/php/issues/272
|
|
ENV PHP_CFLAGS="-fstack-protector-strong -fpic -fpie -O2"
|
|
ENV PHP_CPPFLAGS="$PHP_CFLAGS"
|
|
ENV PHP_LDFLAGS="-Wl,-O1 -Wl,--hash-style=both -pie"
|
|
|
|
ENV GPG_KEYS 0BD78B5F97500D450838F95DFE857D9A90D90EC1 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3
|
|
|
|
ENV PHP_VERSION 5.6.40
|
|
ENV PHP_URL="https://secure.php.net/get/php-5.6.40.tar.xz/from/this/mirror" PHP_ASC_URL="https://secure.php.net/get/php-5.6.40.tar.xz.asc/from/this/mirror"
|
|
ENV PHP_SHA256="1369a51eee3995d7fbd1c5342e5cc917760e276d561595b6052b21ace2656d1c" PHP_MD5=""
|
|
|
|
RUN set -xe; \
|
|
\
|
|
fetchDeps=' \
|
|
wget \
|
|
'; \
|
|
if ! command -v gpg > /dev/null; then \
|
|
fetchDeps="$fetchDeps \
|
|
dirmngr \
|
|
gnupg \
|
|
"; \
|
|
fi; \
|
|
apt-get update; \
|
|
apt-get install -y --no-install-recommends $fetchDeps; \
|
|
rm -rf /var/lib/apt/lists/*; \
|
|
\
|
|
mkdir -p /usr/src; \
|
|
cd /usr/src; \
|
|
\
|
|
wget -O php.tar.xz "$PHP_URL"; \
|
|
\
|
|
if [ -n "$PHP_SHA256" ]; then \
|
|
echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; \
|
|
fi; \
|
|
if [ -n "$PHP_MD5" ]; then \
|
|
echo "$PHP_MD5 *php.tar.xz" | md5sum -c -; \
|
|
fi; \
|
|
\
|
|
if [ -n "$PHP_ASC_URL" ]; then \
|
|
wget -O php.tar.xz.asc "$PHP_ASC_URL"; \
|
|
export GNUPGHOME="$(mktemp -d)"; \
|
|
for key in $GPG_KEYS; do \
|
|
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; \
|
|
done; \
|
|
gpg --batch --verify php.tar.xz.asc php.tar.xz; \
|
|
command -v gpgconf > /dev/null && gpgconf --kill all; \
|
|
rm -rf "$GNUPGHOME"; \
|
|
fi; \
|
|
\
|
|
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps
|
|
|
|
COPY --from=php:5.6 /usr/local/bin/docker-php-source /usr/local/bin/
|
|
|
|
RUN set -eux; \
|
|
\
|
|
savedAptMark="$(apt-mark showmanual)"; \
|
|
apt-get update; \
|
|
apt-get install -y --no-install-recommends \
|
|
libcurl4-openssl-dev \
|
|
libedit-dev \
|
|
libsqlite3-dev \
|
|
libssl1.0-dev \
|
|
libxml2-dev \
|
|
zlib1g-dev \
|
|
libmariadb2 libmariadbclient-dev-compat \
|
|
${PHP_EXTRA_BUILD_DEPS:-} \
|
|
; \
|
|
rm -rf /var/lib/apt/lists/*; \
|
|
\
|
|
export \
|
|
CFLAGS="$PHP_CFLAGS" \
|
|
CPPFLAGS="$PHP_CPPFLAGS" \
|
|
LDFLAGS="$PHP_LDFLAGS" \
|
|
; \
|
|
docker-php-source extract; \
|
|
cd /usr/src/php; \
|
|
gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; \
|
|
debMultiarch="$(dpkg-architecture --query DEB_BUILD_MULTIARCH)"; \
|
|
# https://bugs.php.net/bug.php?id=74125
|
|
if [ ! -d /usr/include/curl ]; then \
|
|
ln -sT "/usr/include/$debMultiarch/curl" /usr/local/include/curl; \
|
|
fi; \
|
|
./configure \
|
|
--build="$gnuArch" \
|
|
--with-config-file-path="$PHP_INI_DIR" \
|
|
--with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \
|
|
\
|
|
# make sure invalid --configure-flags are fatal errors intead of just warnings
|
|
--enable-option-checking=fatal \
|
|
\
|
|
# https://github.com/docker-library/php/issues/439
|
|
--with-mhash \
|
|
\
|
|
# --enable-ftp is included here because ftp_ssl_connect() needs ftp to be compiled statically (see https://github.com/docker-library/php/issues/236)
|
|
--enable-ftp \
|
|
# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195)
|
|
--enable-mbstring \
|
|
# Use MariaDB's libmysqlclient library instead of mysqlnd to be able to communicate with MySQL 8+, which uses new locales of the utf8mb4 family that are unknown to old mysqlnd
|
|
--disable-mysqlnd \
|
|
--with-mysql="/usr" \
|
|
--with-mysqli="/usr/bin/mysql_config" \
|
|
--with-pdo-mysql="/usr" \
|
|
\
|
|
--with-curl \
|
|
--with-libedit \
|
|
--with-openssl \
|
|
--with-zlib \
|
|
\
|
|
# bundled pcre does not support JIT on s390x
|
|
# https://manpages.debian.org/stretch/libpcre3-dev/pcrejit.3.en.html#AVAILABILITY_OF_JIT_SUPPORT
|
|
$(test "$gnuArch" = 's390x-linux-gnu' && echo '--without-pcre-jit') \
|
|
--with-libdir="lib/$debMultiarch" \
|
|
\
|
|
${PHP_EXTRA_CONFIGURE_ARGS:-} \
|
|
; \
|
|
make -j "$(nproc)"; \
|
|
make install; \
|
|
find /usr/local/bin /usr/local/sbin -type f -executable -exec strip --strip-all '{}' + || true; \
|
|
make clean; \
|
|
\
|
|
# https://github.com/docker-library/php/issues/692 (copy default example "php.ini" files somewhere easily discoverable)
|
|
cp -v php.ini-* "$PHP_INI_DIR/"; \
|
|
\
|
|
cd /; \
|
|
docker-php-source delete; \
|
|
\
|
|
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies
|
|
apt-mark auto '.*' > /dev/null; \
|
|
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
|
|
find /usr/local -type f -executable -exec ldd '{}' ';' \
|
|
| awk '/=>/ { print $(NF-1) }' \
|
|
| sort -u \
|
|
| xargs -r dpkg-query --search \
|
|
| cut -d: -f1 \
|
|
| sort -u \
|
|
| xargs -r apt-mark manual \
|
|
; \
|
|
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
|
|
\
|
|
php --version; \
|
|
\
|
|
# https://github.com/docker-library/php/issues/443
|
|
pecl update-channels; \
|
|
rm -rf /tmp/pear ~/.pearrc
|
|
|
|
COPY --from=php:5.6 /usr/local/bin/docker-php-ext-* /usr/local/bin/docker-php-entrypoint /usr/local/bin/
|
|
|
|
ENTRYPOINT ["docker-php-entrypoint"]
|
|
##<autogenerated>##
|
|
CMD ["php", "-a"]
|
|
##</autogenerated>##
|
|
|
|
# Download script to install PHP extensions and dependencies
|
|
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
|
|
|
|
RUN chmod +x /usr/local/bin/install-php-extensions
|
|
|
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update -q \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -qq -y \
|
|
curl \
|
|
git \
|
|
zip unzip \
|
|
# iconv, mbstring and pdo_sqlite are omitted as they are already installed
|
|
&& PHP_EXTENSIONS=" \
|
|
amqp \
|
|
bcmath \
|
|
bz2 \
|
|
calendar \
|
|
event \
|
|
exif \
|
|
gd \
|
|
gettext \
|
|
imagick \
|
|
intl \
|
|
ldap \
|
|
mcrypt \
|
|
memcached \
|
|
mysql \
|
|
mysqli \
|
|
opcache \
|
|
pdo_mysql \
|
|
pdo_pgsql \
|
|
pgsql \
|
|
redis \
|
|
soap \
|
|
sockets \
|
|
xsl \
|
|
zip \
|
|
" \
|
|
&& install-php-extensions $PHP_EXTENSIONS
|
|
|
|
# Install Composer.
|
|
ENV PATH=$PATH:/root/composer/vendor/bin \
|
|
COMPOSER_ALLOW_SUPERUSER=1 \
|
|
COMPOSER_HOME=/root/composer
|
|
RUN cd /opt \
|
|
# Download installer and check for its integrity.
|
|
&& curl -sSL https://getcomposer.org/installer > composer-setup.php \
|
|
&& curl -sSL https://composer.github.io/installer.sha384sum > composer-setup.sha384sum \
|
|
&& sha384sum --check composer-setup.sha384sum \
|
|
# Install Composer 2.
|
|
&& php composer-setup.php --install-dir=/usr/local/bin --filename=composer --2 \
|
|
# Remove installer files.
|
|
&& rm /opt/composer-setup.php /opt/composer-setup.sha384sum
|