Skip to content

A highly opinionated docker image which aims to be perfectly suited to run our Laravel applications.

License

Notifications You must be signed in to change notification settings

sourceboat/docker-laravel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f1e1d2e · Mar 31, 2022
Dec 12, 2021
Jul 29, 2021
Oct 19, 2020
Oct 22, 2020
Sep 7, 2020
Feb 10, 2022
Nov 7, 2019
Dec 12, 2021
Dec 13, 2021

Repository files navigation

docker-laravel

Release Docker Pulls Image Size

A highly opinionated docker image which aims to be perfectly suited to run our Laravel applications.

What's included?

This Image includes some features to ease the work with Laravel in Docker:

  • Tooling and extensions needed for Laravel applications
  • Dependency management: Composer, Npm and Yarn
  • Datastores: MariaDB, MySQL, Redis
  • Startup commands

Usage

Create a Dockerfile with the following contents (and adjust version tag):

FROM sourceboat/docker-laravel:x.x.x

# install yarn dependencies
COPY package.json yarn.* ./
RUN yarn install --pure-lockfile

# copy application
COPY . ./

# install composer dependencies
RUN composer install -d /opt/app --prefer-dist --no-progress --no-interaction --optimize-autoloader

# create storage symlink
RUN php artisan storage:link

# build assets
RUN yarn production

Create a docker-compose.yml with the following contents:

version: '3.7'
services:
  app:
    build: .
    restart: unless-stopped
    environment:
      - PHP_OPCACHE_VALIDATE_TIMESTAMPS=1
      - PHP_MEMORY_LIMIT=1G
      - PHP_MAX_EXECUTION_TIME=30
      - STARTUP_COMMAND1=/root/modules/dev.sh
      - STARTUP_COMMAND2=php artisan migrate --force
      - STARTUP_COMMAND3=php artisan setup
    volumes:
      - ./:/opt/app:cached
    ports:
      - "8080:8080"
    depends_on:
      - mysql
  mysql:
    image: mysql:8.0
    environment:
      - "MYSQL_ROOT_PASSWORD=secret"
      - "MYSQL_DATABASE=default"

Add more services (e.g. redis) if needed.

Make sure to adjust your .env accordingly and set APP_URL to http://localhost:8080.

Run docker-compose up to start the services.

Startup Commands

Further commands can be defined via ENV variable STARTUP_COMMANDXXX, which are executed at container start before the actual command.

The commands must be numbered sequentially and start with 1 (e.g. STARTUP_COMMAND1=command, STARTUP_COMMAND2=...).

version: '3.7'
services:
  app:
    image: sourceboat/docker-laravel
    restart: unless-stopped
    environment:
      - PHP_OPCACHE_VALIDATE_TIMESTAMPS=1
      - PHP_MEMORY_LIMIT=1G
      - PHP_MAX_EXECUTION_TIME=30
      - STARTUP_COMMAND1=/root/modules/storage.sh
      - STARTUP_COMMAND2=/root/modules/cache.sh
      - STARTUP_COMMAND3=php artisan migrate --force
      - STARTUP_COMMAND4=php artisan horizon:restart
    volumes:
      - ./:/opt/app:cached
    ports:
      - "8080:8080"
    depends_on:
      - mysql
  mysql:
    image: mysql:8.0
    environment:
      - "MYSQL_ROOT_PASSWORD=secret"
      - "MYSQL_DATABASE=default"

Changelog

Check releases for all notable changes.

Credits

License

The MIT License (MIT). Please see License File for more information.