Minimal configuration Docker to run Laravel application

Minimal configuration Docker to run Laravel application

Dima Botezatu
07 Jul, 2019
Max 3min read

The one thing about setting up a container for Laravel on the internet is a lot of plugins or scripts like or others.
But sometimes we need something simpler and more minimal, to use services like web and database.

If you have a docker installed then let's get to work, if you don't, install it, see the link.

We create a file in the root folder of the project and call it docker-compose.yml:

version: '3'

    - APACHE_RUN_USER=#1000
      context: ./docker/web
    - 10000:80
    - ./:/var/www/html

    image: mariadb
    restart: always
    - 33061:3306
      - ./docker/database:/var/lib/mysql

So, we have two services: web and database.

For web service we set the port 10000, meaning it will be available at the address, you can change it whenever you want, just check that it is not busy in your system.

Now, let's create a folder in the root folder of the project and call it docker

Inside this folder we will create 2 folders: database and web:

  • the database folder is for saving all data from container
  • the web folder contains configuration script for running the apache server

So, inside the web folder create a file default.conf

<VirtualHost *:80>
    ServerName localhost

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Then create a new file without extension and call it Dockerfile

FROM php:7.2-apache

RUN apt-get update && apt-get install -y \
    		libfreetype6-dev \
    		libpng-dev \
    		libwebp-dev \
    		libjpeg62-turbo-dev \
    		libmcrypt-dev \
    		libzip-dev \
            zip \
    		git \
    		mysql-client \
    && docker-php-ext-install \
    pdo_mysql \
    gd \
    zip \
    && a2enmod \

# Add the user UID:1000, GID:1000, home at /app
RUN groupadd -r app -g 1000 && useradd -u 1000 -r -g app -m -d /app -s /sbin/nologin -c "App user" app && \
    chmod 755 /var/www/html

RUN php -r "readfile('');" | php -- --install-dir=/usr/bin/ --filename=composer

RUN echo "file_uploads = On\n" \
         "memory_limit = 500M\n" \
         "upload_max_filesize = 500M\n" \
         "post_max_size = 500M\n" \
         "max_execution_time = 600\n" \
         > /usr/local/etc/php/conf.d/uploads.ini

USER app

WORKDIR /var/www/html

USER root

COPY default.conf /etc/apache2/sites-enabled/000-default.conf

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]


A summary with reference to what is in this file:

  • I uploaded the php: 7.2-apache image, then installed some libraries for basic php.
  • We also install php composer to be able to run laravel commands from the container.
  • We configure php.ini and set max_upload = 500MB in case the application is in development, if it is production then change the value you need.

In your terminal execute:

docker-compose up --build

*Parameter --build uses it only the first time or if you made any changes to one of the created files.

If you did not receive errors in the terminal, then your application is available at:

But do not rush, we need to configure the settings for the database in the .env file from Laravel project.


Now you can open your application in browser:

To execute Laravel commands, you must log in to the container:

docker-compose exec --user app web bash
Get weekly updates on the newest design stories, case studies and tips right in your mailbox.
A confirmation has been sent by email.
If you don't find it in your inbox, check your spam folder!