Laravel development environment in Docker Containers

Wiwat Srisattha
2 min readJul 7, 2017

Prerequisites

Make sure you have already installed both Docker Engine and Docker Compose.

$ docker -v
Docker version 17.06.0-ce, build 02c1d87
$ docker-compose -v
docker-compose version 1.14.0, build c7bdf9e3

1. Create a directory for the project

$ mkdir laravel
$ cd laravel
$ mkdir logs
$ mkdir -p nginx/conf.d
$ mkdir www

2. Create a Dockerfile

docker-compose.yml

version: '2'services:
nginx:
image: nginx:mainline-alpine
ports:
- "8080:80"
volumes:
- ./www:/var/www
- ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
- ./logs/nginx:/var/log/nginx
links:
- php7fpm
depends_on:
- php7fpm
- mysql
artisan:
image: wiwatsrt/docker-laravel-artisan
volumes:
- ./www:/var/www
links:
- mysql
depends_on:
- mysql
composer:
image: wiwatsrt/docker-laravel-composer
volumes:
- ./www:/var/www
php7fpm:
image: wiwatsrt/docker-laravel-php7fpm
volumes:
- ./www:/var/www
links:
- mysql
depends_on:
- mysql
mysql:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
- ./logs/mysql:/var/log/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootsecret
- MYSQL_DATABASE=homestead
- MYSQL_USER=homestead
- MYSQL_PASSWORD=secret
nodejs:
image: wiwatsrt/docker-laravel-nodejs
volumes:
- ./www:/var/www
volumes:
db_data:

nginx/conf.d/default.conf

server {
listen 80;
server_name localhost;
root /var/www/public;
index index.php;
charset utf-8;
access_log /var/log/nginx/localhost.access.log main;
location / {
try_files $uri $uri/ /index.php$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass php7fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

3. Installing Laravel Via Composer Create-Project

$ docker-compose run --rm composer create-project --prefer-dist laravel/laravel .

4. Configure Laravel for MySQL

change DB_HOST in .env to point to mysql

5. Run Docker

$ docker-compose up -d
http://localhost:8080

Usage

Running Artisan commands

Example:
$ docker-compose run --rm artisan make:auth
$ docker-compose run --rm artisan migrate
$ docker-compose run --rm artisan tinker

Running composer commands

Example:
$ docker-compose run --rm composer update
$ docker-compose run --rm composer require laravelcollective/html

Running with Node.js

$ docker-compose run --rm nodejs npm install

--

--