github.com/ddev/ddev@v1.23.2-0.20240519125000-d824ffe36ff3/containers/ddev-php-base/Dockerfile (about) 1 ### ---------------------------base-------------------------------------- 2 ### Build the base Debian image that will be used in every other image 3 FROM debian:bookworm-slim as base 4 5 RUN ls -l $(which dpkg-split) && ls -l $(which dpkg-deb) 6 RUN for item in dpkg-split dpkg-deb; do \ 7 if [ ! -f /usr/sbin/$item ]; then \ 8 ln -sf /usr/bin/$item /usr/sbin/$item; \ 9 fi; \ 10 done 11 RUN for item in tar rm; do \ 12 if [ ! -f /usr/sbin/$item ]; then \ 13 ln -sf /bin/$item /usr/sbin/$item; \ 14 fi; \ 15 done 16 17 RUN ls -l /usr/sbin/dpkg-split /usr/sbin/dpkg-deb /usr/sbin/tar /usr/sbin/rm 18 19 RUN apt-get -qq update 20 RUN apt-get -qq install --no-install-recommends --no-install-suggests -y \ 21 apt-transport-https \ 22 ca-certificates \ 23 bzip2 \ 24 curl \ 25 git \ 26 gnupg \ 27 less \ 28 lsb-release \ 29 procps \ 30 tree \ 31 vim \ 32 wget 33 #END base 34 35 ### ---------------------------ddev-xdebug-build-------------------------------------- 36 ### Xdebug compile specific version because 3.3 is not fully reliable 37 ### See https://github.com/ddev/ddev/issues/6159 38 ### We don't need to recompile every Xdebug library https://xdebug.org/docs/compat (only PHP 8.0, 8.1, 8.2 can have Xdebug 3.2) 39 ### PECL does not allow you to install multiple versions of Xdebug, so there is `rm -f xdebug.reg` 40 FROM base as ddev-xdebug-build 41 SHELL ["/bin/bash", "-c"] 42 RUN curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb && \ 43 dpkg -i /tmp/debsuryorg-archive-keyring.deb && rm -f /tmp/debsuryorg-archive-keyring.deb && \ 44 echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list && apt-get update 45 ARG XDEBUG_VERSION="3.2.2" 46 ARG XDEBUG_BUILD_PACKAGES="build-essential php-pear php8.0-dev php8.1-dev php8.2-dev" 47 RUN set -eu -o pipefail; \ 48 apt-get -qq update && \ 49 apt-get -qq install --no-install-recommends --no-install-suggests -y ${XDEBUG_BUILD_PACKAGES} 50 RUN pecl channel-update pecl.php.net && \ 51 for version in 8.0 8.1 8.2; do \ 52 (apt-get -qq remove -y php${version}-xdebug || true) && \ 53 pecl -d php_suffix=${version} install -f xdebug-${XDEBUG_VERSION} && \ 54 rm -f /usr/share/php/.registry/.channel.pecl.php.net/xdebug.reg || exit $?; \ 55 done 56 #END ddev-xdebug-build 57 58 ### ---------------------------ddev-php-base-------------------------------------- 59 ### Build ddev-php-base, which is the base for ddev-php-prod and ddev-webserver-* 60 ### This combines the packages and features of DDEV’s ddev-webserver and PHP image 61 FROM base AS ddev-php-base 62 ARG PHP_DEFAULT_VERSION="8.2" 63 ENV DDEV_PHP_VERSION=$PHP_DEFAULT_VERSION 64 ENV PHP_VERSIONS="php5.6 php7.0 php7.1 php7.2 php7.3 php7.4 php8.0 php8.1 php8.2 php8.3" 65 ENV PHP_INI=/etc/php/$PHP_DEFAULT_VERSION/fpm/php.ini 66 ENV YQ_VERSION=v4.30.5 67 ENV DRUSH_VERSION=8.4.12 68 ENV NODE_VERSION=20 69 # composer normally screams about running as root, we don't need that. 70 ENV COMPOSER_ALLOW_SUPERUSER 1 71 ENV COMPOSER_PROCESS_TIMEOUT 2000 72 73 # TARGETPLATFORM is Docker buildx's target platform (e.g. linux/arm64), while 74 # BUILDPLATFORM is the platform of the build host (e.g. linux/amd64) 75 ARG TARGETPLATFORM 76 ARG BUILDPLATFORM 77 78 SHELL ["/bin/bash", "-c"] 79 80 RUN curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ 81 | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null 82 RUN echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ 83 http://nginx.org/packages/debian `lsb_release -cs` nginx" > /etc/apt/sources.list.d/nginx.list 84 85 RUN curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb && \ 86 dpkg -i /tmp/debsuryorg-archive-keyring.deb && rm -f /tmp/debsuryorg-archive-keyring.deb && \ 87 echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list && apt-get update 88 RUN curl -sSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg && \ 89 echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list 90 91 RUN apt-get -qq update 92 RUN apt-get -qq install --no-install-recommends --no-install-suggests -y \ 93 apache2 \ 94 file \ 95 ghostscript \ 96 imagemagick \ 97 gunicorn \ 98 graphicsmagick \ 99 jq \ 100 mariadb-client \ 101 msmtp \ 102 nginx \ 103 nodejs \ 104 postgresql-client \ 105 sqlite3 106 107 RUN npm install --unsafe-perm=true --global gulp-cli yarn 108 # Normal user needs to be able to write to php sessions 109 RUN set -eu -o pipefail && LATEST=$(curl -L --fail --silent "https://api.github.com/repos/nvm-sh/nvm/releases/latest" | jq -r .tag_name) && curl --fail -sL https://raw.githubusercontent.com/nvm-sh/nvm/${LATEST}/install.sh -o /usr/local/bin/install_nvm.sh && chmod +x /usr/local/bin/install_nvm.sh 110 111 # The number of permutations of php packages available on each architecture because 112 # too much to handle, so has been codified here instead of in obscure logic 113 ENV php56_amd64="apcu bcmath bz2 curl cli common fpm gd imagick intl json ldap mbstring mcrypt memcached mysql opcache pgsql readline redis soap sqlite3 uploadprogress xdebug xhprof xml xmlrpc zip" 114 ENV php56_arm64="apcu bcmath bz2 curl cli common fpm gd imagick intl json ldap mbstring mcrypt mysql opcache pgsql readline soap sqlite3 uploadprogress xdebug xml xhprof xmlrpc zip" 115 ENV php70_amd64="apcu apcu-bc bcmath bz2 curl cli common fpm gd imagick intl json ldap mbstring mcrypt memcached mysql opcache pgsql readline redis soap sqlite3 uploadprogress xdebug xhprof xml xmlrpc zip" 116 ENV php70_arm64=$php70_amd64 117 ENV php71_amd64=$php70_amd64 118 ENV php71_arm64=$php70_arm64 119 ENV php72_amd64="apcu apcu-bc bcmath bz2 curl cli common fpm gd imagick intl json ldap mbstring memcached mysql opcache pgsql readline redis soap sqlite3 uploadprogress xdebug xhprof xml xmlrpc zip" 120 ENV php72_arm64=$php72_amd64 121 ENV php73_amd64=$php72_amd64 122 ENV php73_arm64=$php72_arm64 123 ENV php74_amd64="apcu apcu-bc bcmath bz2 curl cli common fpm gd imagick intl json ldap mbstring memcached mysql opcache pgsql readline redis soap sqlite3 uploadprogress xdebug xhprof xml xmlrpc zip" 124 ENV php74_arm64=$php74_amd64 125 126 # As of php8.0 json is now part of core package and xmlrpc has been removed from PECL 127 ENV php80_amd64="apcu bcmath bz2 curl cli common fpm gd imagick intl ldap mbstring memcached mysql opcache pgsql readline redis soap sqlite3 uploadprogress xdebug xhprof xml xmlrpc zip" 128 ENV php80_arm64=$php80_amd64 129 130 ENV php81_amd64=$php80_amd64 131 ENV php81_arm64=$php81_amd64 132 ENV php82_amd64=$php81_amd64 133 ENV php82_arm64=$php82_amd64 134 ENV php83_amd64=$php82_amd64 135 ENV php83_arm64=$php83_amd64 136 137 RUN for v in $PHP_VERSIONS; do \ 138 targetarch=${TARGETPLATFORM#linux/}; \ 139 pkgvar=${v//.}_${targetarch}; \ 140 pkgs=$(echo ${!pkgvar} | awk -v v="$v" ' BEGIN {RS=" "; } { printf "%s-%s ",v,$0 ; }' ); \ 141 [[ ${pkgs// } != "" ]] && (apt-get -qq install --no-install-recommends --no-install-suggests -y $pkgs || exit $?) \ 142 done 143 ### ---------------------------ddev-xdebug-build-------------------------------------- 144 ### The dates from /usr/lib/php/YYYYMMDD/ represent PHP API versions https://unix.stackexchange.com/a/591771 145 RUN apt-get -qq remove -y php8.0-xdebug php8.1-xdebug php8.2-xdebug 146 COPY --from=ddev-xdebug-build /usr/lib/php/20200930/xdebug.so /usr/lib/php/20200930/xdebug.so 147 COPY --from=ddev-xdebug-build /usr/lib/php/20210902/xdebug.so /usr/lib/php/20210902/xdebug.so 148 COPY --from=ddev-xdebug-build /usr/lib/php/20220829/xdebug.so /usr/lib/php/20220829/xdebug.so 149 #END ddev-xdebug-build 150 RUN phpdismod xhprof 151 RUN apt-get -qq autoremove -y 152 RUN curl -L --fail -o /usr/local/bin/composer -sSL https://getcomposer.org/composer-stable.phar && chmod ugo+wx /usr/local/bin/composer 153 RUN curl -L --fail -sSL "https://github.com/drush-ops/drush/releases/download/${DRUSH_VERSION}/drush.phar" -o /usr/local/bin/drush8 && chmod +x /usr/local/bin/drush8 154 RUN curl --fail -sSL -o /usr/local/bin/wp-cli -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && chmod +x /usr/local/bin/wp-cli && ln -sf /usr/local/bin/wp-cli /usr/local/bin/wp 155 RUN url="https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_${TARGETPLATFORM#linux/}"; wget ${url} -O /usr/bin/yq && chmod +x /usr/bin/yq 156 ADD ddev-php-files / 157 RUN apt-get -qq autoremove && apt-get -qq clean -y && rm -rf /var/lib/apt/lists/* /tmp/* 158 RUN ln -sf /usr/sbin/php-fpm${DDEV_PHP_VERSION} /usr/sbin/php-fpm 159 RUN mkdir -p /run/php && chown -R www-data:www-data /run 160 RUN chmod 777 /var/lib/php/sessions 161 #END ddev-php-base 162 163 ### ---------------------------ddev-php-prod-------------------------------------- 164 ### Build ddev-php-prod from ddev-php-base as a single layer 165 ### There aren't any differences 166 FROM scratch AS ddev-php-prod 167 COPY --from=ddev-php-base / / 168 EXPOSE 8080 8585 169 CMD ["/usr/sbin/php-fpm", "-F"] 170 #END ddev-php-prod