A minimal setup for creating Laravel projects with Docker. The containers use Alpine Linux as base image.
- Nginx 1.15
- PHP-FPM 7.2
- Composer 1.7.2
- Node 8.12
- docker-compose.yml
- docker
- nginx
A minimal setup for creating Laravel projects with Docker. The containers use Alpine Linux as base image.
version: '3' | |
services: | |
nginx: | |
build: docker/nginx | |
volumes: | |
- ./:/var/www | |
ports: | |
- 80:80 | |
- 443:443 | |
php-fpm: | |
build: docker/php-fpm | |
volumes: | |
- ./:/var/www | |
expose: | |
- 9000 | |
node: | |
build: docker/node | |
volumes: | |
- ./:/var/www | |
ports: | |
- 3000:3000 | |
workspace: | |
build: docker/workspace | |
volumes: | |
- ./:/var/www |
user www-data; | |
worker_processes 4; | |
pid /run/nginx.pid; | |
daemon off; | |
events { | |
worker_connections 2048; | |
multi_accept on; | |
use epoll; | |
} | |
http { | |
server_tokens off; | |
sendfile on; | |
tcp_nopush on; | |
tcp_nodelay on; | |
keepalive_timeout 15; | |
types_hash_max_size 2048; | |
client_max_body_size 20M; | |
include /etc/nginx/mime.types; | |
default_type application/octet-stream; | |
access_log /dev/stdout; | |
error_log /dev/stderr; | |
gzip on; | |
gzip_disable "msie6"; | |
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | |
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; | |
include /etc/nginx/conf.d/*.conf; | |
include /etc/nginx/sites-available/*.conf; | |
open_file_cache off; # Disabled for issue 619 | |
charset UTF-8; | |
} |
upstream php-upstream { | |
server php-fpm:9000; | |
} | |
server { | |
listen 80; | |
server_name localhost; | |
root /var/www/public; | |
index index.php index.html index.htm; | |
error_log /var/log/nginx/local.redis_error.log; | |
access_log /var/log/nginx/local.redis_access.log; | |
gzip on; | |
gzip_disable "MSIE [1-6]\\.(?!.*SV1)"; | |
gzip_proxied any; | |
gzip_comp_level 5; | |
gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp image/svg+xml; | |
gzip_vary on; | |
location / { | |
try_files $uri $uri/ /index.php$is_args$args; | |
} | |
location ~ \.php$ { | |
try_files $uri /index.php =404; | |
fastcgi_pass php-upstream; | |
fastcgi_index index.php; | |
fastcgi_buffers 16 16k; | |
fastcgi_buffer_size 32k; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
fastcgi_read_timeout 600; | |
include fastcgi_params; | |
} | |
location /.well-known/acme-challenge/ { | |
root /var/www/letsencrypt/; | |
log_not_found off; | |
} | |
} |
FROM nginx:1.15-alpine | |
RUN adduser -D -u 1000 www-data \ | |
&& rm /etc/nginx/conf.d/default.conf | |
COPY nginx.conf /etc/nginx/ | |
COPY default.conf /etc/nginx/conf.d/ | |
EXPOSE 80 443 | |
CMD nginx |
FROM node:8.12.0-alpine | |
USER node | |
RUN mkdir ~/.npm-global \ | |
&& npm config set prefix '~/.npm-global' \ | |
&& export PATH=~/.npm-global/bin:$PATH \ | |
&& npm i -g yarn | |
WORKDIR /var/www | |
EXPOSE 3000 | |
CMD tail -f /dev/null |
FROM php:7.2-fpm-alpine | |
RUN mkdir -p /var/www | |
WORKDIR /var/www | |
EXPOSE 9000 | |
CMD php-fpm |
FROM postgres:9.6-alpine | |
EXPOSE 5432 | |
CMD postgres |
FROM composer:1.7.2 | |
WORKDIR /var/www | |
CMD tail -f /dev/null |