Files

184 lines
5.6 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Docker Usage for Local Development
This documents hwo to use docker for local development on OSX but can be modified to run under
windows, it uses a multi stage build process and the latest alpine images to keep the container sizes to a minimum.
it fully supports xdebug and a server version of mysql server. This presents a very fast development
experience that does not pollute the host operating system.
### Why I Use Docker
Docker plays a crucial role in my deployment strategy. It allows me to containerize my Laravel applications, ensuring
consistency across different environments and across multiple services that I need to run a production Laravel app -
Queue workers, Schedulers, Nightwatch agent, etc..
1. Consistent Environments: Every deployment maintains the same configurations, reducing bugs and deployment issues.
2. Scalability: Docker’s lightweight containers.
3. The possibility for automated deployment, Integration with Git allows for continuous deployment workflows.
## Docker Compose
1. We assume you have docker installed and running
2. and also docker-compose installed
3. you can also use laravel sail *** the configuration overrides the default sail definitions
```
services:
php-fpm:
build:
context: ./docker/php-fpm
dockerfile: Dockerfile
container_name: laravel-php
working_dir: /var/www/html
volumes:
# ##########################################################
# Source code via bind mount (fast reads on mac:delegated)
# This makes docker much faster
# ##########################################################
- ./:/var/www/html:delegated
# ##########################################################
# Hot paths on named volumes (fast writes, Linux FS)
# This means we have very fast writes as they are not replicated
# to the host file system, this means that they must be recreated
# when built and also you must run composer install as well
# ##########################################################
- vendor:/var/www/html/vendor
- storage:/var/www/html/storage
- cache:/var/www/html/bootstrap/cache
environment:
PHP_OPCACHE_ENABLE: "1"
PHP_OPCACHE_MEMORY: "256"
PHP_FPM_MAX_CHILDREN: "16"
XDEBUG_MODE: "debug,develop"
extra_hosts:
- "host.docker.internal:host-gateway"
expose:
- "9000"
- "9003"
networks:
web:
shared:
aliases: [ api.medidev.vm, nginx, gateway ]
nginx:
image: nginx:alpine
container_name: laravel-nginx
entrypoint: [ "nginx", "-g", "daemon off;" ]
depends_on: [ php-fpm ]
volumes:
- ./:/var/www/html:ro,delegated
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
- ./docker/nginx/logs:/var/log/nginx
- ./docker/nginx/ssl:/etc/nginx/ssl:ro
ports:
- "80:80"
- "443:443"
networks:
web:
shared:
aliases:
- nginx
- gateway
- api.medidev.vm
redis:
image: redis:alpine
container_name: laravel-redis
command: [ "redis-server", "--save", "", "--appendonly", "no", "--loglevel", "warning" ]
ports:
- "6379:6379"
networks: [ web ]
mysql:
image: mysql:9.0
container_name: laravel-mysql
command: [ "mysqld", "--log-error-verbosity=2","--mysqlx=0","--defaults-file=/etc/mysql/conf.d/my.cnf" ]
logging:
driver: "none"
environment:
MYSQL_ROOT_PASSWORD: "987400Kmh"
MYSQL_DATABASE: "AAMEDIUK"
MYSQL_LOG_CONSOLE: "false"
#>/dev/null 2>&1
entrypoint: [ "sh","-lc","exec mysqld --datadir=/var/lib/mysql --user=mysql --mysqlx=0 --log-error-verbosity=2 " ]
ports:
- "3306:3306"
volumes:
- dbdata_medidev:/var/lib/mysql/
# ##########################################################
# Optional custom config / init files:
# ##########################################################
- ./docker/mysql/conf.d:/etc/mysql/conf.d:ro
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-p987400Kmh" ]
interval: 10s
timeout: 5s
retries: 10
networks: [ web ]
queue:
build:
context: ./docker/php-fpm
dockerfile: Dockerfile
container_name: laravel-queue
command: [ "/usr/bin/supervisord", "-c", "/etc/supervisord.conf" ]
working_dir: /var/www/html
volumes:
- ./:/var/www/html:delegated
- vendor:/var/www/html/vendor
- storage:/var/www/html/storage
- cache:/var/www/html/bootstrap/cache
depends_on:
- redis
- mysql
networks: [ web ]
restart: unless-stopped
networks:
web:
driver: bridge
shared:
external: true
name: shared-frontend
volumes:
vendor:
storage:
cache:
dbdata_medidev:
```
You need to create a docker directory from the project root
and add the following files to this directory once downloaded.
[Download docker.zip](assets/docker.zip){: download}
you will also need to contact the author for a copy of the mysql databases;
Once all the files are in place you can execute
```
sail up --build
or
docker-compose build --no-cache
```
Fix invalid cache path after rebuild as were using names paths
You can also use this command
````
docker exec -it laravel-php bash -lc \
"mkdir -p bootstrap/cache storage/framework/{cache,sessions,views} \
&& chown -R www-data:www-data bootstrap storage \
&& chmod -R ug+rwX bootstrap storage"
`````
NB also run composer install
````
docker network create shared-frontend
````
This makes the necessary cache dirs etc
````
mkdir -p bootstrap/cache storage/framework/{cache,sessions,views,testing,cache/data} && chown -R www-data:www-data bootstrap storage
````