Skip to content

Instantly share code, notes, and snippets.

@mijndert
Created May 28, 2021 13:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mijndert/81a3779817e57a8903329dde82e2eeed to your computer and use it in GitHub Desktop.
Save mijndert/81a3779817e57a8903329dde82e2eeed to your computer and use it in GitHub Desktop.
WIP multi-stage build for Laravel
FROM php:7.4-fpm-alpine AS be-build
WORKDIR /app/
COPY . .
RUN apk add libzip-dev \
&& docker-php-ext-install zip \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install \
--ignore-platform-reqs \
--no-interaction \
--no-plugins \
--no-scripts \
--prefer-dist \
--no-dev \
--optimize-autoloader
# =============================================================
FROM node:16-alpine AS fe-build
WORKDIR /app
COPY --from=be-build /app/ .
RUN npm install \
&& npm run production
# =============================================================
FROM php:7.4-fpm-alpine AS app
RUN apk add libzip-dev \
&& docker-php-ext-install zip \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN apk add --no-cache php7 \
php7-common \
php7-fpm \
php7-pdo \
php7-opcache \
php7-zip \
php7-phar \
php7-iconv \
php7-cli \
php7-curl \
php7-openssl \
php7-mbstring \
php7-tokenizer \
php7-fileinfo \
php7-json \
php7-xml \
php7-xmlwriter \
php7-simplexml \
php7-dom \
php7-pdo_mysql \
php7-pdo_sqlite \
php7-tokenizer \
php7-pecl-redis
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
WORKDIR /app
COPY --from=be-build /app/ .
COPY --from=fe-build /app/public /app/public
RUN chown -R www-data:www-data /app
RUN chmod g+x /app \
&& chmod g+x /app/public \
&& chmod g+x /app/public/index.php
RUN composer dump-autoload -o
EXPOSE 9000
CMD ["php-fpm"]
# =============================================================
FROM php:7.4-fpm-alpine AS worker
RUN apk add libzip-dev \
&& docker-php-ext-install zip \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN apk add --no-cache php7 \
php7-common \
php7-fpm \
php7-pdo \
php7-opcache \
php7-zip \
php7-phar \
php7-iconv \
php7-cli \
php7-curl \
php7-openssl \
php7-mbstring \
php7-tokenizer \
php7-fileinfo \
php7-json \
php7-xml \
php7-xmlwriter \
php7-simplexml \
php7-dom \
php7-pdo_mysql \
php7-pdo_sqlite \
php7-tokenizer \
php7-pecl-redis
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
#RUN sed -i 's/9000/3000/' /usr/local/etc/php-fpm.d/zz-docker.conf
WORKDIR /app
COPY --from=be-build /app/ .
COPY --from=fe-build /app/public /app/public
RUN chown -R www-data:www-data /app
RUN composer dump-autoload -o
CMD ["php", "artisan", "queue:work"]
# =============================================================
FROM nginx:stable AS web
WORKDIR /app
COPY --from=be-build /app/ .
COPY --from=fe-build /app/public /app/public
COPY docker/vhost.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment