Created
January 30, 2018 14:40
-
-
Save theobeaudenon/c85fe0ff0041d8a8ff07f34f5a907f96 to your computer and use it in GitHub Desktop.
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
# | |
# NOTE: THIS DOCKERFILE IS GENERATED VIA "update.sh" | |
# | |
# PLEASE DO NOT EDIT IT DIRECTLY. | |
# | |
FROM debian:jessie | |
# 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 | |
# persistent / runtime deps | |
ENV PHPIZE_DEPS \ | |
autoconf \ | |
dpkg-dev \ | |
file \ | |
g++ \ | |
gcc \ | |
libc-dev \ | |
make \ | |
pkg-config \ | |
re2c | |
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>## | |
RUN apt-get update \ | |
&& apt-get install -y --no-install-recommends \ | |
apache2 \ | |
&& rm -rf /var/lib/apt/lists/* | |
ENV APACHE_CONFDIR /etc/apache2 | |
ENV APACHE_ENVVARS $APACHE_CONFDIR/envvars | |
RUN set -ex \ | |
\ | |
# generically convert lines like | |
# export APACHE_RUN_USER=www-data | |
# into | |
# : ${APACHE_RUN_USER:=www-data} | |
# export APACHE_RUN_USER | |
# so that they can be overridden at runtime ("-e APACHE_RUN_USER=...") | |
&& sed -ri 's/^export ([^=]+)=(.*)$/: ${\1:=\2}\nexport \1/' "$APACHE_ENVVARS" \ | |
\ | |
# setup directories and permissions | |
&& . "$APACHE_ENVVARS" \ | |
&& for dir in \ | |
"$APACHE_LOCK_DIR" \ | |
"$APACHE_RUN_DIR" \ | |
"$APACHE_LOG_DIR" \ | |
/var/www/html \ | |
; do \ | |
rm -rvf "$dir" \ | |
&& mkdir -p "$dir" \ | |
&& chown -R "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$dir"; \ | |
done | |
# Apache + PHP requires preforking Apache for best results | |
RUN a2dismod mpm_event && a2enmod mpm_prefork | |
# logs should go to stdout / stderr | |
RUN set -ex \ | |
&& . "$APACHE_ENVVARS" \ | |
&& ln -sfT /dev/stderr "$APACHE_LOG_DIR/error.log" \ | |
&& ln -sfT /dev/stdout "$APACHE_LOG_DIR/access.log" \ | |
&& ln -sfT /dev/stdout "$APACHE_LOG_DIR/other_vhosts_access.log" | |
# PHP files should be handled by PHP, and should be preferred over any other file type | |
RUN { \ | |
echo '<FilesMatch \.php$>'; \ | |
echo '\tSetHandler application/x-httpd-php'; \ | |
echo '</FilesMatch>'; \ | |
echo; \ | |
echo 'DirectoryIndex disabled'; \ | |
echo 'DirectoryIndex index.php index.html'; \ | |
echo; \ | |
echo '<Directory /var/www/>'; \ | |
echo '\tOptions -Indexes'; \ | |
echo '\tAllowOverride All'; \ | |
echo '</Directory>'; \ | |
} | tee "$APACHE_CONFDIR/conf-available/docker-php.conf" \ | |
&& a2enconf docker-php | |
ENV PHP_EXTRA_BUILD_DEPS apache2-dev | |
ENV PHP_EXTRA_CONFIGURE_ARGS --with-apxs2 | |
##</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 1A4E8B7277C42E53DBA9C7B9BCAA30EA9C0D5763 6E4F6AB321FDC07F2C332E3AC2BF0BC433CFC8B3 | |
ENV PHP_VERSION 7.0.27 | |
ENV PHP_URL="https://secure.php.net/get/php-7.0.27.tar.xz/from/this/mirror" PHP_ASC_URL="https://secure.php.net/get/php-7.0.27.tar.xz.asc/from/this/mirror" | |
ENV PHP_SHA256="4b2bc823e806dbf7b62fe0b92b0d14b0c6e03f88c3fc5d96278416c54ce11f6c" 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 --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ | |
done; \ | |
gpg --batch --verify php.tar.xz.asc php.tar.xz; \ | |
rm -rf "$GNUPGHOME"; \ | |
fi; \ | |
\ | |
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps | |
COPY 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 \ | |
libssl-dev \ | |
libxml2-dev \ | |
zlib1g-dev \ | |
${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" \ | |
\ | |
--disable-cgi \ | |
\ | |
# --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 \ | |
# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself) | |
--enable-mysqlnd \ | |
\ | |
--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; \ | |
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 | |
RUN buildDeps=" \ | |
libbz2-dev \ | |
libmemcached-dev \ | |
libmysqlclient-dev \ | |
libsasl2-dev \ | |
" \ | |
runtimeDeps=" \ | |
curl \ | |
git \ | |
libfreetype6-dev \ | |
libicu-dev \ | |
libjpeg-dev \ | |
libldap2-dev \ | |
libmcrypt-dev \ | |
libmemcachedutil2 \ | |
libpng12-dev \ | |
libpq-dev \ | |
libxml2-dev \ | |
" \ | |
&& apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y $buildDeps $runtimeDeps \ | |
&& docker-php-ext-install bcmath bz2 calendar iconv intl mbstring mcrypt mysqli opcache pdo_mysql pdo_pgsql pgsql soap zip \ | |
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ | |
&& docker-php-ext-install gd \ | |
&& docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ | |
&& docker-php-ext-install ldap \ | |
&& pecl install memcached redis \ | |
&& docker-php-ext-enable memcached.so redis.so \ | |
&& apt-get purge -y --auto-remove $buildDeps \ | |
&& rm -r /var/lib/apt/lists/* \ | |
&& a2enmod rewrite | |
COPY docker-php-ext-* docker-php-entrypoint /usr/local/bin/ | |
ENTRYPOINT ["docker-php-entrypoint"] | |
##<autogenerated>## | |
COPY apache2-foreground /usr/local/bin/ | |
WORKDIR /var/www/html | |
EXPOSE 80 | |
CMD ["apache2-foreground"] | |
##</autogenerated>## |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment