Laravel development environment in Docker Containers
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
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