From bf2e8c9c9921fcb6ca8a956f786f17fd96f19fe9 Mon Sep 17 00:00:00 2001 From: Birkhoff Lee Date: Wed, 4 Dec 2019 08:23:11 +0800 Subject: [PATCH] Use multi-stage build for Docker image 1. Allows to build the composer dependencies with official composer img 2. php-fpm --nodaemonize: Force to stay in foreground and ignore daemo- nize option from configuration file --- Dockerfile | 38 +++++++++++++++++++++++++++----------- nginx.conf | 2 +- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index d12a2cb8..94cc748e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,39 @@ -FROM php:7.2-fpm-alpine +FROM composer as composer + +# Copy composer files from project root into composer container's working dir +COPY composer.* /app/ + +# Run composer to build dependencies in vendor folder +RUN set -xe \ + && composer install --no-dev --no-scripts --no-suggest --no-interaction --prefer-dist --optimize-autoloader + +# Copy everything from project root into composer container's working dir +COPY . /app + +# Generated optimized autoload files containing all classes from vendor folder and project itself +RUN composer dump-autoload --no-dev --optimize --classmap-authoritative + +FROM php:7.4.0-fpm-alpine # Use the default production configuration RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" -RUN apk add --no-cache curl git tar unzip libpng-dev libxml2-dev +RUN apk add --no-cache libpng-dev libxml2-dev && \ + docker-php-ext-install bcmath ctype json gd mbstring pdo pdo_mysql tokenizer xml -RUN docker-php-ext-install bcmath ctype json gd mbstring pdo pdo_mysql tokenizer xml && \ - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \ - composer --version +# Set container's working dir +WORKDIR /app + +# Copy everything from project root into php container's working dir +COPY . /app -WORKDIR /var/www +# Copy vendor folder from composer container into php container +COPY --from=composer /app/vendor /app/vendor -COPY . /var/www - -RUN composer install --optimize-autoloader && \ - php artisan config:cache && \ +RUN php artisan config:cache && \ chmod -R 755 storage bootstrap/cache && \ chown -R www-data:www-data storage EXPOSE 9000 -CMD ["php-fpm"] +CMD ["php-fpm", "--nodaemonize"] diff --git a/nginx.conf b/nginx.conf index ecb9f59f..47d52728 100644 --- a/nginx.conf +++ b/nginx.conf @@ -24,7 +24,7 @@ http { server { listen 80 default_server; - root /var/www/public; + root /app/public; index index.php; charset utf-8;