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