From 2e7a6acd13ccc2f60499e986d21e07947c34b33b Mon Sep 17 00:00:00 2001 From: Daniele Piaggesi Date: Mon, 22 Dec 2025 10:53:30 +0100 Subject: [PATCH] feat(php config): Refactored Dockerfiles and made php configuration dinamically changeable by env --- 8.1/alpine/fpm/Dockerfile | 72 ++++++++++++++-------------- 8.1/bookworm/apache/Dockerfile | 70 ++++++++++++--------------- 8.1/trixie/apache/Dockerfile | 69 ++++++++++++-------------- 8.2/alpine/fpm/Dockerfile | 67 +++++++++++++------------- 8.2/bookworm/apache/Dockerfile | 72 +++++++++++++--------------- 8.2/trixie/apache/Dockerfile | 71 +++++++++++++-------------- 8.3/alpine/fpm/Dockerfile | 71 ++++++++++++++------------- 8.3/bookworm/apache/Dockerfile | 72 +++++++++++++--------------- 8.3/trixie/apache/Dockerfile | 71 +++++++++++++-------------- config.json | 18 +++---- scripts/docker-php-entrypoint-env.sh | 27 +++++++++++ 11 files changed, 335 insertions(+), 345 deletions(-) create mode 100644 scripts/docker-php-entrypoint-env.sh diff --git a/8.1/alpine/fpm/Dockerfile b/8.1/alpine/fpm/Dockerfile index a5572ec..69f940b 100644 --- a/8.1/alpine/fpm/Dockerfile +++ b/8.1/alpine/fpm/Dockerfile @@ -1,10 +1,13 @@ +ARG PHP_VERSION=8.1.34 + FROM composer:2.9.2 AS composer -FROM php:8.1.33-fpm-alpine3.21 -LABEL com.bmeme.project.family='PHP Docker Image' \ - com.bmeme.project.version='8.1.33-fpm-alpine' \ +FROM php:${PHP_VERSION}-fpm-alpine3.22 + +LABEL com.bmeme.project.family='PHP Docker Image' \ + com.bmeme.project.version="${PHP_VERSION}-fpm-alpine" \ com.bmeme.maintainer.1='Daniele Piaggesi ' \ com.bmeme.maintainer.2='Roberto Mariani ' \ - com.bmeme.refreshedat='2025-12-02' + com.bmeme.refreshedat='2025-12-22' # Variables ENV COMPOSER_HOME=/var/www/.composer \ @@ -44,24 +47,39 @@ ENV PERSISTENT_PROGRAMS="\ vim \ zip" +WORKDIR /var/www/html + # install Composer COPY --from=composer /usr/bin/composer /usr/bin/composer +# install the entrypoint script for env generation +COPY scripts/docker-php-entrypoint-env.sh /usr/local/bin/docker-php-entrypoint-env.sh # install the PHP extensions we need -RUN set -eux; \ +RUN --mount=type=cache,target=/tmp/pear,sharing=locked --mount=type=cache,target=/root/.cache/composer set -eux; \ apk add --no-cache \ ${PERSISTENT_PROGRAMS} \ + freetype \ + libjpeg-turbo \ + libpng \ + icu-libs \ + libmcrypt \ + pcre2 \ + libpq \ + libzip \ + libwebp \ + ; \ + apk add --no-cache --virtual .build-deps \ ${PHPIZE_DEPS} \ freetype-dev \ libjpeg-turbo-dev \ libpng-dev \ icu-dev \ libmcrypt-dev \ - pcre-dev \ + pcre2-dev \ libpq-dev \ libzip-dev \ libwebp-dev \ - ; \ + ; \ \ pecl install \ mcrypt-${MCRYPT_VERSION} \ @@ -82,7 +100,7 @@ RUN set -eux; \ docker-php-ext-configure redis \ --enable-redis-igbinary \ --enable-redis-lzf \ - ;\ + ; \ \ docker-php-ext-enable \ mcrypt \ @@ -102,41 +120,23 @@ RUN set -eux; \ zip \ ; \ \ - # remove php source docker-php-source delete; \ - apk del pcre-dev ${PHPIZE_DEPS} + apk del .build-deps RUN set -eux; \ # set localtime and timezone - rm -f /etc/localtime; \ - cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ + ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ echo "${TIMEZONE}" > /etc/timezone; \ \ - # configure composer home directory - mkdir ${COMPOSER_HOME}; \ - \ - # set application ini settings - { \ - echo "date.timezone = ${TIMEZONE}"; \ - echo "error_log = ${PHP_ERROR_LOG}"; \ - echo "log_errors = ${PHP_LOG_ENABLED}"; \ - echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}"; \ - echo "memory_limit = ${PHP_MEMORY_LIMIT}"; \ - echo "post_max_size = ${PHP_POST_MAX_SIZE}"; \ - echo "sendmail_path = ${PHP_SENDMAIL}"; \ - echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}"; \ - } > /usr/local/etc/php/conf.d/application.ini; \ + # make the entrypoint script executable + chmod +x /usr/local/bin/docker-php-entrypoint-env.sh; \ \ - # set opcache ini settings - # see https://secure.php.net/manual/en/opcache.installation.php - { \ - echo "opcache.enable = ${OPCACHE_ENABLED}"; \ - echo "opcache.memory_consumption = ${OPCACHE_MEMORY_CONSUMPTION}"; \ - echo "opcache.interned_strings_buffer = ${OPCACHE_INTERNED_STRINGS_BUFFER}"; \ - echo "opcache.max_accelerated_files = ${OPCACHE_MAX_ACCELERATED_FILES}"; \ - echo "opcache.revalidate_freq = ${OPCACHE_REVALIDATE_FREQ}"; \ - echo "opcache.fast_shutdown = ${OPCACHE_FAST_SHUTDOWN}"; \ - } > /usr/local/etc/php/conf.d/opcache.ini; \ + # configure composer home directory + mkdir -p ${COMPOSER_HOME}; \ + chown -R www-data:www-data ${COMPOSER_HOME}; \ \ # inject index.php echo " /var/www/html/index.php + +ENTRYPOINT ["docker-php-entrypoint-env.sh"] +CMD ["php-fpm"] diff --git a/8.1/bookworm/apache/Dockerfile b/8.1/bookworm/apache/Dockerfile index 352ccb4..50ff069 100644 --- a/8.1/bookworm/apache/Dockerfile +++ b/8.1/bookworm/apache/Dockerfile @@ -1,21 +1,28 @@ +ARG PHP_VERSION=8.1.34 + FROM composer:2.9.2 AS composer -FROM php:8.1.33-apache-bookworm AS ansible +FROM php:${PHP_VERSION}-apache-bookworm AS ansible -ENV ANSIBLE_CORE_VERSION 2.17.14 +ENV DEBIAN_FRONTEND=noninteractive +ENV ANSIBLE_CORE_VERSION=2.17.14 -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/root/.cache/pip set -eux; \ # install python apt-get update && apt-get install -y --no-install-recommends python3 python3-distutils python3-pip; \ \ # install ansible - pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages + pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages; \ + \ + rm -rf /var/lib/apt/lists/* -FROM php:8.1.33-apache-bookworm +FROM php:${PHP_VERSION}-apache-bookworm +ARG PHP_VERSION +ENV DEBIAN_FRONTEND=noninteractive LABEL com.bmeme.project.family='PHP Docker Image' \ - com.bmeme.project.version='8.1.33-apache-bookworm' \ + com.bmeme.project.version="${PHP_VERSION}-apache-bookworm" \ com.bmeme.maintainer.1='Daniele Piaggesi ' \ com.bmeme.maintainer.2='Roberto Mariani ' \ - com.bmeme.refreshedat='2025-12-02' + com.bmeme.refreshedat='2025-12-22' # Variables ENV COMPOSER_HOME=/var/www/.composer \ @@ -54,7 +61,11 @@ ENV PERSISTENT_PROGRAMS="\ tzdata \ unzip \ vim \ - zip" + zip \ + curl \ + ca-certificates" + +WORKDIR /var/www/html # install Composer COPY --from=composer /usr/bin/composer /usr/bin/composer @@ -63,9 +74,10 @@ COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=ansible /usr/lib/python3.11/lib-dynload /usr/lib/python3.11/lib-dynload COPY --from=ansible /usr/local/lib/python3.11/dist-packages /usr/local/lib/python3.11/dist-packages COPY --from=ansible /usr/local/bin/ansible* /usr/local/bin/ +COPY scripts/docker-php-entrypoint-env.sh /usr/local/bin/docker-php-entrypoint-env.sh # install the PHP extensions we need -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/tmp/pear --mount=type=cache,target=/root/.cache/composer set -eux; \ \ if command -v a2enmod; then \ a2enmod rewrite; \ @@ -81,7 +93,7 @@ RUN set -eux; \ libicu-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ - libpcre3-dev \ + libpcre2-dev \ libpng-dev \ libpq-dev \ libzip-dev \ @@ -123,8 +135,6 @@ RUN set -eux; \ pdo_mysql \ pdo_pgsql \ redis \ - # due to error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' - # sockets \ zip \ ; \ \ @@ -148,35 +158,17 @@ RUN set -eux; \ RUN set -eux; \ # set localtime and timezone - rm /etc/localtime; \ - cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ + ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ echo "${TIMEZONE}" > /etc/timezone; \ \ # configure composer home directory - mkdir ${COMPOSER_HOME}; \ - \ - # set application ini settings - { \ - echo "date.timezone = ${TIMEZONE}"; \ - echo "error_log = ${PHP_ERROR_LOG}"; \ - echo "log_errors = ${PHP_LOG_ENABLED}"; \ - echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}"; \ - echo "memory_limit = ${PHP_MEMORY_LIMIT}"; \ - echo "post_max_size = ${PHP_POST_MAX_SIZE}"; \ - echo "sendmail_path = ${PHP_SENDMAIL}"; \ - echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}"; \ - } > /usr/local/etc/php/conf.d/application.ini; \ - \ - # set opcache ini settings - # see https://secure.php.net/manual/en/opcache.installation.php - { \ - echo "opcache.enable = ${OPCACHE_ENABLED}"; \ - echo "opcache.memory_consumption = ${OPCACHE_MEMORY_CONSUMPTION}"; \ - echo "opcache.interned_strings_buffer = ${OPCACHE_INTERNED_STRINGS_BUFFER}"; \ - echo "opcache.max_accelerated_files = ${OPCACHE_MAX_ACCELERATED_FILES}"; \ - echo "opcache.revalidate_freq = ${OPCACHE_REVALIDATE_FREQ}"; \ - echo "opcache.fast_shutdown = ${OPCACHE_FAST_SHUTDOWN}"; \ - } > /usr/local/etc/php/conf.d/opcache.ini; \ + mkdir -p "$COMPOSER_HOME" && chown -R www-data:www-data "$COMPOSER_HOME"; \ + \ + # make docker-php-entrypoint-env.sh executable + chmod +x /usr/local/bin/docker-php-entrypoint-env.sh; \ \ # inject index.php - echo " /var/www/html/index.php \ No newline at end of file + echo " /var/www/html/index.php + +ENTRYPOINT ["docker-php-entrypoint-env.sh"] +CMD ["apache2-foreground"] diff --git a/8.1/trixie/apache/Dockerfile b/8.1/trixie/apache/Dockerfile index a02521d..43a81a9 100644 --- a/8.1/trixie/apache/Dockerfile +++ b/8.1/trixie/apache/Dockerfile @@ -1,21 +1,28 @@ +ARG PHP_VERSION=8.1.34 + FROM composer:2.9.2 AS composer -FROM php:8.1.33-apache-trixie AS ansible +FROM php:${PHP_VERSION}-apache-trixie AS ansible -ENV ANSIBLE_CORE_VERSION 2.19.4 +ENV DEBIAN_FRONTEND=noninteractive +ENV ANSIBLE_CORE_VERSION=2.19.4 -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/root/.cache/pip set -eux; \ # install python apt-get update && apt-get install -y --no-install-recommends python3 python3-pip; \ \ # install ansible - pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages + pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages; \ + \ + rm -rf /var/lib/apt/lists/* -FROM php:8.1.33-apache-trixie +FROM php:${PHP_VERSION}-apache-trixie +ARG PHP_VERSION +ENV DEBIAN_FRONTEND=noninteractive LABEL com.bmeme.project.family='PHP Docker Image' \ - com.bmeme.project.version='8.1.33-apache-trixie' \ + com.bmeme.project.version="${PHP_VERSION}-apache-trixie" \ com.bmeme.maintainer.1='Daniele Piaggesi ' \ com.bmeme.maintainer.2='Roberto Mariani ' \ - com.bmeme.refreshedat='2025-12-02' + com.bmeme.refreshedat='2025-12-22' # Variables ENV COMPOSER_HOME=/var/www/.composer \ @@ -50,10 +57,15 @@ ENV PERSISTENT_PROGRAMS="\ default-mysql-client \ patch \ python3 \ + python3-packaging \ tzdata \ unzip \ vim \ - zip" + zip \ + curl \ + ca-certificates" + +WORKDIR /var/www/html # install Composer COPY --from=composer /usr/bin/composer /usr/bin/composer @@ -62,9 +74,10 @@ COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=ansible /usr/lib/python3.13/lib-dynload /usr/lib/python3.13/lib-dynload COPY --from=ansible /usr/local/lib/python3.13/dist-packages /usr/local/lib/python3.13/dist-packages COPY --from=ansible /usr/local/bin/ansible* /usr/local/bin/ +COPY scripts/docker-php-entrypoint-env.sh /usr/local/bin/docker-php-entrypoint-env.sh # install the PHP extensions we need -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/tmp/pear --mount=type=cache,target=/root/.cache/composer set -eux; \ \ if command -v a2enmod; then \ a2enmod rewrite; \ @@ -122,8 +135,6 @@ RUN set -eux; \ pdo_mysql \ pdo_pgsql \ redis \ - # due to error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' - # sockets \ zip \ ; \ \ @@ -147,35 +158,17 @@ RUN set -eux; \ RUN set -eux; \ # set localtime and timezone - rm /etc/localtime; \ - cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ + ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ echo "${TIMEZONE}" > /etc/timezone; \ \ # configure composer home directory - mkdir ${COMPOSER_HOME}; \ - \ - # set application ini settings - { \ - echo "date.timezone = ${TIMEZONE}"; \ - echo "error_log = ${PHP_ERROR_LOG}"; \ - echo "log_errors = ${PHP_LOG_ENABLED}"; \ - echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}"; \ - echo "memory_limit = ${PHP_MEMORY_LIMIT}"; \ - echo "post_max_size = ${PHP_POST_MAX_SIZE}"; \ - echo "sendmail_path = ${PHP_SENDMAIL}"; \ - echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}"; \ - } > /usr/local/etc/php/conf.d/application.ini; \ - \ - # set opcache ini settings - # see https://secure.php.net/manual/en/opcache.installation.php - { \ - echo "opcache.enable = ${OPCACHE_ENABLED}"; \ - echo "opcache.memory_consumption = ${OPCACHE_MEMORY_CONSUMPTION}"; \ - echo "opcache.interned_strings_buffer = ${OPCACHE_INTERNED_STRINGS_BUFFER}"; \ - echo "opcache.max_accelerated_files = ${OPCACHE_MAX_ACCELERATED_FILES}"; \ - echo "opcache.revalidate_freq = ${OPCACHE_REVALIDATE_FREQ}"; \ - echo "opcache.fast_shutdown = ${OPCACHE_FAST_SHUTDOWN}"; \ - } > /usr/local/etc/php/conf.d/opcache.ini; \ + mkdir -p "$COMPOSER_HOME" && chown -R www-data:www-data "$COMPOSER_HOME"; \ + \ + # make docker-php-entrypoint-env.sh executable + chmod +x /usr/local/bin/docker-php-entrypoint-env.sh; \ \ # inject index.php - echo " /var/www/html/index.php \ No newline at end of file + echo " /var/www/html/index.php + +ENTRYPOINT ["docker-php-entrypoint-env.sh"] +CMD ["apache2-foreground"] diff --git a/8.2/alpine/fpm/Dockerfile b/8.2/alpine/fpm/Dockerfile index 06e4dd6..a3c23d9 100644 --- a/8.2/alpine/fpm/Dockerfile +++ b/8.2/alpine/fpm/Dockerfile @@ -1,10 +1,13 @@ +ARG PHP_VERSION=8.2.30 + FROM composer:2.9.2 AS composer -FROM php:8.2.29-fpm-alpine3.21 -LABEL com.bmeme.project.family='PHP Docker Image' \ - com.bmeme.project.version='8.2.29-fpm-alpine' \ +FROM php:${PHP_VERSION}-fpm-alpine3.23 + +LABEL com.bmeme.project.family='PHP Docker Image' \ + com.bmeme.project.version="${PHP_VERSION}-fpm-alpine" \ com.bmeme.maintainer.1='Daniele Piaggesi ' \ com.bmeme.maintainer.2='Roberto Mariani ' \ - com.bmeme.refreshedat='2025-12-02' + com.bmeme.refreshedat='2025-12-22' # Variables ENV COMPOSER_HOME=/var/www/.composer \ @@ -44,20 +47,35 @@ ENV PERSISTENT_PROGRAMS="\ vim \ zip" +WORKDIR /var/www/html + # install Composer COPY --from=composer /usr/bin/composer /usr/bin/composer +# install the entrypoint script for env generation +COPY scripts/docker-php-entrypoint-env.sh /usr/local/bin/docker-php-entrypoint-env.sh # install the PHP extensions we need -RUN set -eux; \ +RUN --mount=type=cache,target=/tmp/pear,sharing=locked --mount=type=cache,target=/root/.cache/composer set -eux; \ apk add --no-cache \ ${PERSISTENT_PROGRAMS} \ + freetype \ + libjpeg-turbo \ + libpng \ + icu-libs \ + libmcrypt \ + pcre2 \ + libpq \ + libzip \ + libwebp \ + ; \ + apk add --no-cache --virtual .build-deps \ ${PHPIZE_DEPS} \ freetype-dev \ libjpeg-turbo-dev \ libpng-dev \ icu-dev \ libmcrypt-dev \ - pcre-dev \ + pcre2-dev \ libpq-dev \ libzip-dev \ libwebp-dev \ @@ -82,7 +100,7 @@ RUN set -eux; \ docker-php-ext-configure redis \ --enable-redis-igbinary \ --enable-redis-lzf \ - ;\ + ; \ \ docker-php-ext-enable \ mcrypt \ @@ -102,38 +120,23 @@ RUN set -eux; \ zip \ ; \ \ - # remove php source docker-php-source delete; \ - apk del pcre-dev ${PHPIZE_DEPS} + apk del .build-deps RUN set -eux; \ # set localtime and timezone - rm -f /etc/localtime; \ - cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ + ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ echo "${TIMEZONE}" > /etc/timezone; \ \ - # set application ini settings - { \ - echo "date.timezone = ${TIMEZONE}"; \ - echo "error_log = ${PHP_ERROR_LOG}"; \ - echo "log_errors = ${PHP_LOG_ENABLED}"; \ - echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}"; \ - echo "memory_limit = ${PHP_MEMORY_LIMIT}"; \ - echo "post_max_size = ${PHP_POST_MAX_SIZE}"; \ - echo "sendmail_path = ${PHP_SENDMAIL}"; \ - echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}"; \ - } > /usr/local/etc/php/conf.d/application.ini; \ + # make the entrypoint script executable + chmod +x /usr/local/bin/docker-php-entrypoint-env.sh; \ \ - # set opcache ini settings - # see https://secure.php.net/manual/en/opcache.installation.php - { \ - echo "opcache.enable = ${OPCACHE_ENABLED}"; \ - echo "opcache.memory_consumption = ${OPCACHE_MEMORY_CONSUMPTION}"; \ - echo "opcache.interned_strings_buffer = ${OPCACHE_INTERNED_STRINGS_BUFFER}"; \ - echo "opcache.max_accelerated_files = ${OPCACHE_MAX_ACCELERATED_FILES}"; \ - echo "opcache.revalidate_freq = ${OPCACHE_REVALIDATE_FREQ}"; \ - echo "opcache.fast_shutdown = ${OPCACHE_FAST_SHUTDOWN}"; \ - } > /usr/local/etc/php/conf.d/opcache.ini; \ + # configure composer home directory + mkdir -p ${COMPOSER_HOME}; \ + chown -R www-data:www-data ${COMPOSER_HOME}; \ \ # inject index.php echo " /var/www/html/index.php + +ENTRYPOINT ["docker-php-entrypoint-env.sh"] +CMD ["php-fpm"] diff --git a/8.2/bookworm/apache/Dockerfile b/8.2/bookworm/apache/Dockerfile index 995a200..098d07e 100644 --- a/8.2/bookworm/apache/Dockerfile +++ b/8.2/bookworm/apache/Dockerfile @@ -1,21 +1,28 @@ +ARG PHP_VERSION=8.2.30 + FROM composer:2.9.2 AS composer -FROM php:8.2.29-apache-bookworm AS ansible +FROM php:${PHP_VERSION}-apache-bookworm AS ansible -ENV ANSIBLE_CORE_VERSION 2.17.14 +ENV DEBIAN_FRONTEND=noninteractive +ENV ANSIBLE_CORE_VERSION=2.17.14 -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/root/.cache/pip set -eux; \ # install python apt-get update && apt-get install -y --no-install-recommends python3 python3-distutils python3-pip; \ \ # install ansible - pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages + pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages; \ + \ + rm -rf /var/lib/apt/lists/* -FROM php:8.2.29-apache-bookworm +FROM php:${PHP_VERSION}-apache-bookworm +ARG PHP_VERSION +ENV DEBIAN_FRONTEND=noninteractive LABEL com.bmeme.project.family='PHP Docker Image' \ - com.bmeme.project.version='8.2.29-apache-bookworm' \ + com.bmeme.project.version="${PHP_VERSION}-apache-bookworm" \ com.bmeme.maintainer.1='Daniele Piaggesi ' \ com.bmeme.maintainer.2='Roberto Mariani ' \ - com.bmeme.refreshedat='2025-12-02' + com.bmeme.refreshedat='2025-12-22' # Variables ENV COMPOSER_HOME=/var/www/.composer \ @@ -54,7 +61,11 @@ ENV PERSISTENT_PROGRAMS="\ tzdata \ unzip \ vim \ - zip" + zip \ + curl \ + ca-certificates" + +WORKDIR /var/www/html # install Composer COPY --from=composer /usr/bin/composer /usr/bin/composer @@ -63,9 +74,10 @@ COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=ansible /usr/lib/python3.11/lib-dynload /usr/lib/python3.11/lib-dynload COPY --from=ansible /usr/local/lib/python3.11/dist-packages /usr/local/lib/python3.11/dist-packages COPY --from=ansible /usr/local/bin/ansible* /usr/local/bin/ +COPY scripts/docker-php-entrypoint-env.sh /usr/local/bin/docker-php-entrypoint-env.sh # install the PHP extensions we need -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/tmp/pear --mount=type=cache,target=/root/.cache/composer set -eux; \ \ if command -v a2enmod; then \ a2enmod rewrite; \ @@ -81,7 +93,7 @@ RUN set -eux; \ libicu-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ - libpcre3-dev \ + libpcre2-dev \ libpng-dev \ libpq-dev \ libzip-dev \ @@ -123,8 +135,6 @@ RUN set -eux; \ pdo_mysql \ pdo_pgsql \ redis \ - # due to error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' - # sockets \ zip \ ; \ \ @@ -134,7 +144,7 @@ RUN set -eux; \ ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ | awk '/=>/ { print $3 }' \ | sort -u \ - | xargs -r realpath | xargs -r dpkg-query --search \ + | xargs -r dpkg-query -S \ | cut -d: -f1 \ | sort -u \ | xargs -rt apt-mark manual; \ @@ -148,35 +158,17 @@ RUN set -eux; \ RUN set -eux; \ # set localtime and timezone - rm /etc/localtime; \ - cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ + ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ echo "${TIMEZONE}" > /etc/timezone; \ \ # configure composer home directory - mkdir ${COMPOSER_HOME}; \ - \ - # set application ini settings - { \ - echo "date.timezone = ${TIMEZONE}"; \ - echo "error_log = ${PHP_ERROR_LOG}"; \ - echo "log_errors = ${PHP_LOG_ENABLED}"; \ - echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}"; \ - echo "memory_limit = ${PHP_MEMORY_LIMIT}"; \ - echo "post_max_size = ${PHP_POST_MAX_SIZE}"; \ - echo "sendmail_path = ${PHP_SENDMAIL}"; \ - echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}"; \ - } > /usr/local/etc/php/conf.d/application.ini; \ - \ - # set opcache ini settings - # see https://secure.php.net/manual/en/opcache.installation.php - { \ - echo "opcache.enable = ${OPCACHE_ENABLED}"; \ - echo "opcache.memory_consumption = ${OPCACHE_MEMORY_CONSUMPTION}"; \ - echo "opcache.interned_strings_buffer = ${OPCACHE_INTERNED_STRINGS_BUFFER}"; \ - echo "opcache.max_accelerated_files = ${OPCACHE_MAX_ACCELERATED_FILES}"; \ - echo "opcache.revalidate_freq = ${OPCACHE_REVALIDATE_FREQ}"; \ - echo "opcache.fast_shutdown = ${OPCACHE_FAST_SHUTDOWN}"; \ - } > /usr/local/etc/php/conf.d/opcache.ini; \ + mkdir -p "$COMPOSER_HOME" && chown -R www-data:www-data "$COMPOSER_HOME"; \ + \ + # make docker-php-entrypoint-env.sh executable + chmod +x /usr/local/bin/docker-php-entrypoint-env.sh; \ \ # inject index.php - echo " /var/www/html/index.php \ No newline at end of file + echo " /var/www/html/index.php + +ENTRYPOINT ["docker-php-entrypoint-env.sh"] +CMD ["apache2-foreground"] diff --git a/8.2/trixie/apache/Dockerfile b/8.2/trixie/apache/Dockerfile index 0625188..755b81d 100644 --- a/8.2/trixie/apache/Dockerfile +++ b/8.2/trixie/apache/Dockerfile @@ -1,21 +1,28 @@ +ARG PHP_VERSION=8.2.30 + FROM composer:2.9.2 AS composer -FROM php:8.2.29-apache-trixie AS ansible +FROM php:${PHP_VERSION}-apache-trixie AS ansible -ENV ANSIBLE_CORE_VERSION 2.19.4 +ENV DEBIAN_FRONTEND=noninteractive +ENV ANSIBLE_CORE_VERSION=2.19.4 -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/root/.cache/pip set -eux; \ # install python apt-get update && apt-get install -y --no-install-recommends python3 python3-pip; \ \ # install ansible - pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages + pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages; \ + \ + rm -rf /var/lib/apt/lists/* -FROM php:8.2.29-apache-trixie +FROM php:${PHP_VERSION}-apache-trixie +ARG PHP_VERSION +ENV DEBIAN_FRONTEND=noninteractive LABEL com.bmeme.project.family='PHP Docker Image' \ - com.bmeme.project.version='8.2.29-apache-trixie' \ + com.bmeme.project.version="${PHP_VERSION}-apache-trixie" \ com.bmeme.maintainer.1='Daniele Piaggesi ' \ com.bmeme.maintainer.2='Roberto Mariani ' \ - com.bmeme.refreshedat='2025-12-02' + com.bmeme.refreshedat='2025-12-22' # Variables ENV COMPOSER_HOME=/var/www/.composer \ @@ -50,10 +57,15 @@ ENV PERSISTENT_PROGRAMS="\ default-mysql-client \ patch \ python3 \ + python3-packaging \ tzdata \ unzip \ vim \ - zip" + zip \ + curl \ + ca-certificates" + +WORKDIR /var/www/html # install Composer COPY --from=composer /usr/bin/composer /usr/bin/composer @@ -62,9 +74,10 @@ COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=ansible /usr/lib/python3.13/lib-dynload /usr/lib/python3.13/lib-dynload COPY --from=ansible /usr/local/lib/python3.13/dist-packages /usr/local/lib/python3.13/dist-packages COPY --from=ansible /usr/local/bin/ansible* /usr/local/bin/ +COPY scripts/docker-php-entrypoint-env.sh /usr/local/bin/docker-php-entrypoint-env.sh # install the PHP extensions we need -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/tmp/pear --mount=type=cache,target=/root/.cache/composer set -eux; \ \ if command -v a2enmod; then \ a2enmod rewrite; \ @@ -122,8 +135,6 @@ RUN set -eux; \ pdo_mysql \ pdo_pgsql \ redis \ - # due to error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' - # sockets \ zip \ ; \ \ @@ -133,7 +144,7 @@ RUN set -eux; \ ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ | awk '/=>/ { print $3 }' \ | sort -u \ - | xargs -r realpath | xargs -r dpkg-query --search \ + | xargs -r dpkg-query -S \ | cut -d: -f1 \ | sort -u \ | xargs -rt apt-mark manual; \ @@ -147,35 +158,17 @@ RUN set -eux; \ RUN set -eux; \ # set localtime and timezone - rm /etc/localtime; \ - cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ + ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ echo "${TIMEZONE}" > /etc/timezone; \ \ # configure composer home directory - mkdir ${COMPOSER_HOME}; \ - \ - # set application ini settings - { \ - echo "date.timezone = ${TIMEZONE}"; \ - echo "error_log = ${PHP_ERROR_LOG}"; \ - echo "log_errors = ${PHP_LOG_ENABLED}"; \ - echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}"; \ - echo "memory_limit = ${PHP_MEMORY_LIMIT}"; \ - echo "post_max_size = ${PHP_POST_MAX_SIZE}"; \ - echo "sendmail_path = ${PHP_SENDMAIL}"; \ - echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}"; \ - } > /usr/local/etc/php/conf.d/application.ini; \ - \ - # set opcache ini settings - # see https://secure.php.net/manual/en/opcache.installation.php - { \ - echo "opcache.enable = ${OPCACHE_ENABLED}"; \ - echo "opcache.memory_consumption = ${OPCACHE_MEMORY_CONSUMPTION}"; \ - echo "opcache.interned_strings_buffer = ${OPCACHE_INTERNED_STRINGS_BUFFER}"; \ - echo "opcache.max_accelerated_files = ${OPCACHE_MAX_ACCELERATED_FILES}"; \ - echo "opcache.revalidate_freq = ${OPCACHE_REVALIDATE_FREQ}"; \ - echo "opcache.fast_shutdown = ${OPCACHE_FAST_SHUTDOWN}"; \ - } > /usr/local/etc/php/conf.d/opcache.ini; \ + mkdir -p "$COMPOSER_HOME" && chown -R www-data:www-data "$COMPOSER_HOME"; \ + \ + # make docker-php-entrypoint-env.sh executable + chmod +x /usr/local/bin/docker-php-entrypoint-env.sh; \ \ # inject index.php - echo " /var/www/html/index.php \ No newline at end of file + echo " /var/www/html/index.php + +ENTRYPOINT ["docker-php-entrypoint-env.sh"] +CMD ["apache2-foreground"] diff --git a/8.3/alpine/fpm/Dockerfile b/8.3/alpine/fpm/Dockerfile index 7d25322..b131f03 100644 --- a/8.3/alpine/fpm/Dockerfile +++ b/8.3/alpine/fpm/Dockerfile @@ -1,10 +1,13 @@ -FROM composer:2.8.0 AS composer -FROM php:8.3.28-fpm-alpine3.21 -LABEL com.bmeme.project.family='PHP Docker Image' \ - com.bmeme.project.version='8.3.28-fpm-alpine' \ +ARG PHP_VERSION=8.3.29 + +FROM composer:2.9.2 AS composer +FROM php:${PHP_VERSION}-fpm-alpine3.23 + +LABEL com.bmeme.project.family='PHP Docker Image' \ + com.bmeme.project.version="${PHP_VERSION}-fpm-alpine" \ com.bmeme.maintainer.1='Daniele Piaggesi ' \ com.bmeme.maintainer.2='Roberto Mariani ' \ - com.bmeme.refreshedat='2025-12-02' + com.bmeme.refreshedat='2025-12-22' # Variables ENV COMPOSER_HOME=/var/www/.composer \ @@ -44,22 +47,38 @@ ENV PERSISTENT_PROGRAMS="\ vim \ zip" +WORKDIR /var/www/html + # install Composer COPY --from=composer /usr/bin/composer /usr/bin/composer +# install the entrypoint script for env generation +COPY scripts/docker-php-entrypoint-env.sh /usr/local/bin/docker-php-entrypoint-env.sh # install the PHP extensions we need -RUN set -eux; \ +RUN --mount=type=cache,target=/tmp/pear,sharing=locked --mount=type=cache,target=/root/.cache/composer set -eux; \ apk add --no-cache \ ${PERSISTENT_PROGRAMS} \ + freetype \ + libjpeg-turbo \ + libpng \ + icu-libs \ + libmcrypt \ + pcre2 \ + libpq \ + libzip \ + libwebp \ + ; \ + apk add --no-cache --virtual .build-deps \ ${PHPIZE_DEPS} \ freetype-dev \ libjpeg-turbo-dev \ libpng-dev \ icu-dev \ libmcrypt-dev \ - pcre-dev \ + pcre2-dev \ libpq-dev \ libzip-dev \ + libwebp-dev \ ; \ \ pecl install \ @@ -74,13 +93,14 @@ RUN set -eux; \ docker-php-ext-configure gd \ --with-freetype=/usr \ --with-jpeg=/usr \ + --with-webp=/usr \ ; \ docker-php-ext-configure intl; \ docker-php-ext-configure zip; \ docker-php-ext-configure redis \ --enable-redis-igbinary \ --enable-redis-lzf \ - ;\ + ; \ \ docker-php-ext-enable \ mcrypt \ @@ -100,38 +120,23 @@ RUN set -eux; \ zip \ ; \ \ - # remove php source docker-php-source delete; \ - apk del pcre-dev ${PHPIZE_DEPS} + apk del .build-deps RUN set -eux; \ # set localtime and timezone - rm -f /etc/localtime; \ - cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ + ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ echo "${TIMEZONE}" > /etc/timezone; \ \ - # set application ini settings - { \ - echo "date.timezone = ${TIMEZONE}"; \ - echo "error_log = ${PHP_ERROR_LOG}"; \ - echo "log_errors = ${PHP_LOG_ENABLED}"; \ - echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}"; \ - echo "memory_limit = ${PHP_MEMORY_LIMIT}"; \ - echo "post_max_size = ${PHP_POST_MAX_SIZE}"; \ - echo "sendmail_path = ${PHP_SENDMAIL}"; \ - echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}"; \ - } > /usr/local/etc/php/conf.d/application.ini; \ + # make the entrypoint script executable + chmod +x /usr/local/bin/docker-php-entrypoint-env.sh; \ \ - # set opcache ini settings - # see https://secure.php.net/manual/en/opcache.installation.php - { \ - echo "opcache.enable = ${OPCACHE_ENABLED}"; \ - echo "opcache.memory_consumption = ${OPCACHE_MEMORY_CONSUMPTION}"; \ - echo "opcache.interned_strings_buffer = ${OPCACHE_INTERNED_STRINGS_BUFFER}"; \ - echo "opcache.max_accelerated_files = ${OPCACHE_MAX_ACCELERATED_FILES}"; \ - echo "opcache.revalidate_freq = ${OPCACHE_REVALIDATE_FREQ}"; \ - echo "opcache.fast_shutdown = ${OPCACHE_FAST_SHUTDOWN}"; \ - } > /usr/local/etc/php/conf.d/opcache.ini; \ + # configure composer home directory + mkdir -p ${COMPOSER_HOME}; \ + chown -R www-data:www-data ${COMPOSER_HOME}; \ \ # inject index.php echo " /var/www/html/index.php + +ENTRYPOINT ["docker-php-entrypoint-env.sh"] +CMD ["php-fpm"] diff --git a/8.3/bookworm/apache/Dockerfile b/8.3/bookworm/apache/Dockerfile index c7e19c4..2c2a78c 100644 --- a/8.3/bookworm/apache/Dockerfile +++ b/8.3/bookworm/apache/Dockerfile @@ -1,21 +1,28 @@ +ARG PHP_VERSION=8.3.29 + FROM composer:2.9.2 AS composer -FROM php:8.3.28-apache-bookworm AS ansible +FROM php:${PHP_VERSION}-apache-bookworm AS ansible -ENV ANSIBLE_CORE_VERSION 2.17.14 +ENV DEBIAN_FRONTEND=noninteractive +ENV ANSIBLE_CORE_VERSION=2.17.14 -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/root/.cache/pip set -eux; \ # install python apt-get update && apt-get install -y --no-install-recommends python3 python3-distutils python3-pip; \ \ # install ansible - pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages + pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages; \ + \ + rm -rf /var/lib/apt/lists/* -FROM php:8.3.28-apache-bookworm +FROM php:${PHP_VERSION}-apache-bookworm +ARG PHP_VERSION +ENV DEBIAN_FRONTEND=noninteractive LABEL com.bmeme.project.family='PHP Docker Image' \ - com.bmeme.project.version='8.3.28-apache-bookworm' \ + com.bmeme.project.version="${PHP_VERSION}-apache-bookworm" \ com.bmeme.maintainer.1='Daniele Piaggesi ' \ com.bmeme.maintainer.2='Roberto Mariani ' \ - com.bmeme.refreshedat='2025-12-02' + com.bmeme.refreshedat='2025-12-22' # Variables ENV COMPOSER_HOME=/var/www/.composer \ @@ -54,7 +61,11 @@ ENV PERSISTENT_PROGRAMS="\ tzdata \ unzip \ vim \ - zip" + zip \ + curl \ + ca-certificates" + +WORKDIR /var/www/html # install Composer COPY --from=composer /usr/bin/composer /usr/bin/composer @@ -63,9 +74,10 @@ COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=ansible /usr/lib/python3.11/lib-dynload /usr/lib/python3.11/lib-dynload COPY --from=ansible /usr/local/lib/python3.11/dist-packages /usr/local/lib/python3.11/dist-packages COPY --from=ansible /usr/local/bin/ansible* /usr/local/bin/ +COPY scripts/docker-php-entrypoint-env.sh /usr/local/bin/docker-php-entrypoint-env.sh # install the PHP extensions we need -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/tmp/pear --mount=type=cache,target=/root/.cache/composer set -eux; \ \ if command -v a2enmod; then \ a2enmod rewrite; \ @@ -81,7 +93,7 @@ RUN set -eux; \ libicu-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ - libpcre3-dev \ + libpcre2-dev \ libpng-dev \ libpq-dev \ libzip-dev \ @@ -123,8 +135,6 @@ RUN set -eux; \ pdo_mysql \ pdo_pgsql \ redis \ - # due to error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' - # sockets \ zip \ ; \ \ @@ -134,7 +144,7 @@ RUN set -eux; \ ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ | awk '/=>/ { print $3 }' \ | sort -u \ - | xargs -r realpath | xargs -r dpkg-query --search \ + | xargs -r dpkg-query -S \ | cut -d: -f1 \ | sort -u \ | xargs -rt apt-mark manual; \ @@ -148,35 +158,17 @@ RUN set -eux; \ RUN set -eux; \ # set localtime and timezone - rm /etc/localtime; \ - cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ + ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ echo "${TIMEZONE}" > /etc/timezone; \ \ # configure composer home directory - mkdir ${COMPOSER_HOME}; \ - \ - # set application ini settings - { \ - echo "date.timezone = ${TIMEZONE}"; \ - echo "error_log = ${PHP_ERROR_LOG}"; \ - echo "log_errors = ${PHP_LOG_ENABLED}"; \ - echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}"; \ - echo "memory_limit = ${PHP_MEMORY_LIMIT}"; \ - echo "post_max_size = ${PHP_POST_MAX_SIZE}"; \ - echo "sendmail_path = ${PHP_SENDMAIL}"; \ - echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}"; \ - } > /usr/local/etc/php/conf.d/application.ini; \ - \ - # set opcache ini settings - # see https://secure.php.net/manual/en/opcache.installation.php - { \ - echo "opcache.enable = ${OPCACHE_ENABLED}"; \ - echo "opcache.memory_consumption = ${OPCACHE_MEMORY_CONSUMPTION}"; \ - echo "opcache.interned_strings_buffer = ${OPCACHE_INTERNED_STRINGS_BUFFER}"; \ - echo "opcache.max_accelerated_files = ${OPCACHE_MAX_ACCELERATED_FILES}"; \ - echo "opcache.revalidate_freq = ${OPCACHE_REVALIDATE_FREQ}"; \ - echo "opcache.fast_shutdown = ${OPCACHE_FAST_SHUTDOWN}"; \ - } > /usr/local/etc/php/conf.d/opcache.ini; \ + mkdir -p "$COMPOSER_HOME" && chown -R www-data:www-data "$COMPOSER_HOME"; \ + \ + # make docker-php-entrypoint-env.sh executable + chmod +x /usr/local/bin/docker-php-entrypoint-env.sh; \ \ # inject index.php - echo " /var/www/html/index.php \ No newline at end of file + echo " /var/www/html/index.php + +ENTRYPOINT ["docker-php-entrypoint-env.sh"] +CMD ["apache2-foreground"] diff --git a/8.3/trixie/apache/Dockerfile b/8.3/trixie/apache/Dockerfile index 17fc3f1..31c36b2 100644 --- a/8.3/trixie/apache/Dockerfile +++ b/8.3/trixie/apache/Dockerfile @@ -1,21 +1,28 @@ +ARG PHP_VERSION=8.3.29 + FROM composer:2.9.2 AS composer -FROM php:8.3.28-apache-trixie AS ansible +FROM php:${PHP_VERSION}-apache-trixie AS ansible -ENV ANSIBLE_CORE_VERSION 2.19.4 +ENV DEBIAN_FRONTEND=noninteractive +ENV ANSIBLE_CORE_VERSION=2.19.4 -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/root/.cache/pip set -eux; \ # install python apt-get update && apt-get install -y --no-install-recommends python3 python3-pip; \ \ # install ansible - pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages + pip install --no-cache-dir ansible-core==${ANSIBLE_CORE_VERSION} --break-system-packages; \ + \ + rm -rf /var/lib/apt/lists/* -FROM php:8.3.28-apache-trixie +FROM php:${PHP_VERSION}-apache-trixie +ARG PHP_VERSION +ENV DEBIAN_FRONTEND=noninteractive LABEL com.bmeme.project.family='PHP Docker Image' \ - com.bmeme.project.version='8.3.28-apache-trixie' \ + com.bmeme.project.version="${PHP_VERSION}-apache-trixie" \ com.bmeme.maintainer.1='Daniele Piaggesi ' \ com.bmeme.maintainer.2='Roberto Mariani ' \ - com.bmeme.refreshedat='2025-12-02' + com.bmeme.refreshedat='2025-12-22' # Variables ENV COMPOSER_HOME=/var/www/.composer \ @@ -50,10 +57,15 @@ ENV PERSISTENT_PROGRAMS="\ default-mysql-client \ patch \ python3 \ + python3-packaging \ tzdata \ unzip \ vim \ - zip" + zip \ + curl \ + ca-certificates" + +WORKDIR /var/www/html # install Composer COPY --from=composer /usr/bin/composer /usr/bin/composer @@ -62,9 +74,10 @@ COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=ansible /usr/lib/python3.13/lib-dynload /usr/lib/python3.13/lib-dynload COPY --from=ansible /usr/local/lib/python3.13/dist-packages /usr/local/lib/python3.13/dist-packages COPY --from=ansible /usr/local/bin/ansible* /usr/local/bin/ +COPY scripts/docker-php-entrypoint-env.sh /usr/local/bin/docker-php-entrypoint-env.sh # install the PHP extensions we need -RUN set -eux; \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/tmp/pear --mount=type=cache,target=/root/.cache/composer set -eux; \ \ if command -v a2enmod; then \ a2enmod rewrite; \ @@ -122,8 +135,6 @@ RUN set -eux; \ pdo_mysql \ pdo_pgsql \ redis \ - # due to error: invalid application of 'sizeof' to incomplete type 'struct cmsgcred' - # sockets \ zip \ ; \ \ @@ -133,7 +144,7 @@ RUN set -eux; \ ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ | awk '/=>/ { print $3 }' \ | sort -u \ - | xargs -r realpath | xargs -r dpkg-query --search \ + | xargs -r dpkg-query -S \ | cut -d: -f1 \ | sort -u \ | xargs -rt apt-mark manual; \ @@ -147,35 +158,17 @@ RUN set -eux; \ RUN set -eux; \ # set localtime and timezone - rm /etc/localtime; \ - cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ + ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime; \ echo "${TIMEZONE}" > /etc/timezone; \ \ # configure composer home directory - mkdir ${COMPOSER_HOME}; \ - \ - # set application ini settings - { \ - echo "date.timezone = ${TIMEZONE}"; \ - echo "error_log = ${PHP_ERROR_LOG}"; \ - echo "log_errors = ${PHP_LOG_ENABLED}"; \ - echo "max_execution_time = ${PHP_MAX_EXECUTION_TIME}"; \ - echo "memory_limit = ${PHP_MEMORY_LIMIT}"; \ - echo "post_max_size = ${PHP_POST_MAX_SIZE}"; \ - echo "sendmail_path = ${PHP_SENDMAIL}"; \ - echo "upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}"; \ - } > /usr/local/etc/php/conf.d/application.ini; \ - \ - # set opcache ini settings - # see https://secure.php.net/manual/en/opcache.installation.php - { \ - echo "opcache.enable = ${OPCACHE_ENABLED}"; \ - echo "opcache.memory_consumption = ${OPCACHE_MEMORY_CONSUMPTION}"; \ - echo "opcache.interned_strings_buffer = ${OPCACHE_INTERNED_STRINGS_BUFFER}"; \ - echo "opcache.max_accelerated_files = ${OPCACHE_MAX_ACCELERATED_FILES}"; \ - echo "opcache.revalidate_freq = ${OPCACHE_REVALIDATE_FREQ}"; \ - echo "opcache.fast_shutdown = ${OPCACHE_FAST_SHUTDOWN}"; \ - } > /usr/local/etc/php/conf.d/opcache.ini; \ + mkdir -p "$COMPOSER_HOME" && chown -R www-data:www-data "$COMPOSER_HOME"; \ + \ + # make docker-php-entrypoint-env.sh executable + chmod +x /usr/local/bin/docker-php-entrypoint-env.sh; \ \ # inject index.php - echo " /var/www/html/index.php \ No newline at end of file + echo " /var/www/html/index.php + +ENTRYPOINT ["docker-php-entrypoint-env.sh"] +CMD ["apache2-foreground"] diff --git a/config.json b/config.json index 255594a..949de42 100644 --- a/config.json +++ b/config.json @@ -2,63 +2,63 @@ "include": [ { - "name": "8.3.28-apache-trixie", + "name": "8.3.29-apache-trixie", "php_pretty_version": "8.3", "os_version": "trixie", "php_type": "apache", "latest": true }, { - "name": "8.3.28-apache-bookworm", + "name": "8.3.29-apache-bookworm", "php_pretty_version": "8.3", "os_version": "bookworm", "php_type": "apache", "latest": false }, { - "name": "8.3.28-fpm-alpine", + "name": "8.3.29-fpm-alpine", "php_pretty_version": "8.3", "os_version": "alpine", "php_type": "fpm", "latest": false }, { - "name": "8.2.29-apache-trixie", + "name": "8.2.30-apache-trixie", "php_pretty_version": "8.2", "os_version": "trixie", "php_type": "apache", "latest": false }, { - "name": "8.2.29-apache-bookworm", + "name": "8.2.30-apache-bookworm", "php_pretty_version": "8.2", "os_version": "bookworm", "php_type": "apache", "latest": false }, { - "name": "8.2.29-fpm-alpine", + "name": "8.2.30-fpm-alpine", "php_pretty_version": "8.2", "os_version": "alpine", "php_type": "fpm", "latest": false }, { - "name": "8.1.33-apache-trixie", + "name": "8.1.34-apache-trixie", "php_pretty_version": "8.1", "os_version": "trixie", "php_type": "apache", "latest": false }, { - "name": "8.1.33-apache-bookworm", + "name": "8.1.34-apache-bookworm", "php_pretty_version": "8.1", "os_version": "bookworm", "php_type": "apache", "latest": false }, { - "name": "8.1.33-fpm-alpine", + "name": "8.1.34-fpm-alpine", "php_pretty_version": "8.1", "os_version": "alpine", "php_type": "fpm", diff --git a/scripts/docker-php-entrypoint-env.sh b/scripts/docker-php-entrypoint-env.sh new file mode 100644 index 0000000..049126b --- /dev/null +++ b/scripts/docker-php-entrypoint-env.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env sh +set -e + +# Generate application.ini based on environment variables +cat > /usr/local/etc/php/conf.d/application.ini < /usr/local/etc/php/conf.d/opcache.ini <