github.com/drud/ddev@v1.21.5-alpha1.0.20230226034409-94fcc4b94453/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:bullseye-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-php-base-------------------------------------- 36 ### Build ddev-php-base, which is the base for ddev-php-prod and ddev-webserver-* 37 ### This combines the packages and features of DDEV’s ddev-webserver and PHP image 38 FROM base AS ddev-php-base 39 ARG PHP_DEFAULT_VERSION="8.0" 40 ENV DDEV_PHP_VERSION=$PHP_DEFAULT_VERSION 41 ENV PHP_VERSIONS="php5.6 php7.0 php7.1 php7.2 php7.3 php7.4 php8.0 php8.1 php8.2" 42 ENV PHP_INI=/etc/php/$PHP_DEFAULT_VERSION/fpm/php.ini 43 ENV YQ_VERSION=v4.30.5 44 ENV DRUSH_VERSION=8.4.8 45 ENV NODE_LTS=16 46 # composer normally screams about running as root, we don't need that. 47 ENV COMPOSER_ALLOW_SUPERUSER 1 48 ENV COMPOSER_PROCESS_TIMEOUT 2000 49 50 # TARGETPLATFORM is Docker buildx's target platform (e.g. linux/arm64), while 51 # BUILDPLATFORM is the platform of the build host (e.g. linux/amd64) 52 ARG TARGETPLATFORM 53 ARG BUILDPLATFORM 54 55 SHELL ["/bin/bash", "-c"] 56 57 RUN wget -q -O /tmp/nginx_signing.key http://nginx.org/keys/nginx_signing.key && \ 58 apt-key add /tmp/nginx_signing.key && \ 59 rm /tmp/nginx_signing.key && \ 60 echo "deb http://nginx.org/packages/debian/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx.list 61 62 RUN wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg && \ 63 echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list && apt-get update 64 RUN curl -sSL --fail https://deb.nodesource.com/setup_${NODE_LTS}.x | bash - 65 66 RUN apt-get -qq update 67 RUN apt-get -qq install --no-install-recommends --no-install-suggests -y \ 68 apache2 \ 69 file \ 70 ghostscript \ 71 imagemagick \ 72 graphicsmagick \ 73 jq \ 74 mariadb-client \ 75 msmtp \ 76 nginx \ 77 nodejs \ 78 php-uploadprogress \ 79 postgresql-client \ 80 sqlite3 81 82 RUN npm config set unsafe-perm true && npm install --global gulp-cli yarn 83 # Normal user needs to be able to write to php sessions 84 RUN chmod 777 /var/lib/php/sessions 85 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 86 87 # The number of permutations of php packages available on each architecture because 88 # too much to handle, so has been codified here instead of in obscure logic 89 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" 90 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" 91 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" 92 ENV php70_arm64=$php70_amd64 93 ENV php71_amd64=$php70_amd64 94 ENV php71_arm64=$php70_arm64 95 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" 96 ENV php72_arm64=$php72_amd64 97 ENV php73_amd64=$php72_amd64 98 ENV php73_arm64=$php72_arm64 99 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" 100 ENV php74_arm64=$php74_amd64 101 102 # As of php8.0 json is now part of core package and xmlrpc has been removed from PECL 103 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" 104 ENV php80_arm64=$php80_amd64 105 106 ENV php81_amd64=$php80_amd64 107 ENV php81_arm64=$php81_amd64 108 ENV php82_amd64=$php81_amd64 109 ENV php82_arm64=$php82_amd64 110 111 RUN for v in $PHP_VERSIONS; do \ 112 targetarch=${TARGETPLATFORM#linux/}; \ 113 pkgvar=${v//.}_${targetarch}; \ 114 pkgs=$(echo ${!pkgvar} | awk -v v="$v" ' BEGIN {RS=" "; } { printf "%s-%s ",v,$0 ; }' ); \ 115 [[ ${pkgs// } != "" ]] && (apt-get -qq install --no-install-recommends --no-install-suggests -y $pkgs || exit $?) \ 116 done 117 RUN phpdismod xhprof 118 RUN apt-get -qq autoremove -y 119 RUN curl -L --fail -o /usr/local/bin/composer -sSL https://getcomposer.org/composer-stable.phar && chmod ugo+wx /usr/local/bin/composer 120 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 121 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 122 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 123 ADD ddev-php-files / 124 RUN apt-get -qq autoremove && apt-get -qq clean -y && rm -rf /var/lib/apt/lists/* 125 RUN update-alternatives --set php /usr/bin/php${DDEV_PHP_VERSION} 126 RUN ln -sf /usr/sbin/php-fpm${DDEV_PHP_VERSION} /usr/sbin/php-fpm 127 RUN mkdir -p /run/php && chown -R www-data:www-data /run 128 129 #END ddev-php-base 130 131 ### ---------------------------ddev-php-prod-------------------------------------- 132 ### Build ddev-php-prod from ddev-php-base as a single layer 133 ### There aren't any differences 134 FROM scratch AS ddev-php-prod 135 COPY --from=ddev-php-base / / 136 EXPOSE 8080 8585 137 CMD ["/usr/sbin/php-fpm", "-F"] 138 #END ddev-php-prod