Skip to content

Instantly share code, notes, and snippets.

@frinux
Created October 13, 2020 12:45
Show Gist options
  • Save frinux/56c5701d0d47558ad207e44212ce18ac to your computer and use it in GitHub Desktop.
Save frinux/56c5701d0d47558ad207e44212ce18ac to your computer and use it in GitHub Desktop.
Laravel 8 PHP 7.4 Dockerfile
# #########################################
# Install Composer dependencies
# #########################################
FROM composer:latest as vendor
COPY composer.json composer.json
COPY composer.lock composer.lock
RUN composer install \
--ignore-platform-reqs \
--no-interaction \
--no-plugins \
--no-scripts \
--prefer-dist
# #########################################
# Build PHP Image
# #########################################
FROM php:7.4-apache
# Required packages & php extensions
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
git \
cron \
libfreetype6-dev \
libgmp-dev \
libjpeg-dev \
libmagickwand-dev \
libmemcached-dev \
libpng-dev \
libpq-dev \
libssl-dev \
libxml2-dev \
libz-dev \
libzip-dev \
nano \
openssh-server \
unzip \
zlib1g-dev \
&& docker-php-ext-install bcmath \
&& docker-php-ext-install exif \
&& docker-php-ext-install gmp \
&& docker-php-ext-install intl \
&& docker-php-ext-install pcntl \
&& docker-php-ext-install pdo \
&& docker-php-ext-install pdo_pgsql \
&& docker-php-ext-install pgsql \
&& docker-php-ext-install soap \
&& docker-php-ext-install sockets \
&& docker-php-ext-install zip
# Free space
RUN rm -r /var/lib/apt/lists/*
# Enable mod_rewrite
RUN a2enmod rewrite
# Override Apache document root
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
ARG APP_VERSION
# Fetch previously installed composer deps
COPY --from=vendor --chown=www-data:www-data /app/vendor/ /var/www/html/vendor/
# Fetch project files
COPY --chown=www-data:www-data . /var/www/html
# Write version file
RUN echo ${APP_VERSION} >> /var/www/html/public/version.txt
RUN chown www-data:www-data /var/www/html/public/version.txt
# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
# Override memory limit
RUN echo "memory_limit = 1024M" >> $PHP_INI_DIR/php.ini
# Script handling different roles
# Takes CONTAINER_ROLE environmlent variables
# - app -> start Apache server to serve Laravel API
# - horizon -> starts horizon queue worker
# - queue_worker -> starts laravel native queue worker
# - scheduler -> starts CRON scheduler
COPY docker/docker-command.sh /usr/local/bin/start
RUN chmod u+x /usr/local/bin/start
CMD ["/usr/local/bin/start"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment