Laradock для Laravel
Запускаем Laravel проект в Docker с помощью Laradock.
git submodule add https://github.com/Laradock/laradock.git
Внимание!
По умолчанию создаваемые контейнеры имеют суффикс имени текущего каталога, например: laradock_workspace_1.
Это может привести к смешиванию данных внутри томов контейнера, если вы используете laradock в нескольких проектах.
Измените в конфиге laradock/.env переменную COMPOSE_PROJECT_NAME на что-то уникальное или переименуйте каталог laradock/.
Вместо копирования полного конфига laradock/.env.example, я решил его наследовать и расширять:
#cp laradock/.env.example laradock/.env
touch laradock/.env
Пример конфига laradock/.env:
COMPOSE_PROJECT_NAME=my-project-stack
PHP_VERSION=7.3
WORKSPACE_TIMEZONE=Europe/Kiev
NGINX_HOST_HTTP_PORT=8009
#WORKSPACE_SSH_PORT=2222
#PHP_FPM_INSTALL_MEMCACHED=false
#PHP_FPM_INSTALL_MYSQL_CLIENT=false
#PHP_WORKER_INSTALL_MYSQL_CLIENT=false
NGINX_SITES_PATH=/home/stas/dev/my/pad/pad-reader/nginx/sites/
WORKSPACE_VUE_CLI_SERVE_HOST_PORT=18080
WORKSPACE_VITE_PORT=15173
#MYSQL_VERSION=5.7
MYSQL_VERSION=latest
MYSQL_DATABASE=pad
MYSQL_USER=local
MYSQL_PASSWORD=XXXXXXXXXX
MYSQL_PORT=3308
MYSQL_ROOT_PASSWORD=XXXXXXXXXX
#MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
# Choose storage path on your machine. For all storage systems
#DATA_PATH_HOST=~/.laradock/data
Запуск конфига laradock/docker-compose.yml скриптом dc.sh:
#!/usr/bin/env bash
docker-compose -f laradock/docker-compose.yml --env-file laradock/.env.example --env-file laradock/.env "$@"
./dc.sh up nginx php-fpm mysql workspace docker-in-docker ## @note Перечисляем все контейнеры, чтобы все они остановились по Ctrl+C
Внимание!
Я потратил несколько часов на устранение ошибки "ERROR 1045 (28000): Access denied for user root@localhost (using password: YES)"
sudo rm -rf ~/.laradock/data/mysql
Ошибку вызывал некорректный конфиг: laradock/mysql/my.cnf.
Нужно было закомментировать эту правку:
#[client]
#user=root
#password=root
Также зачем-то запускается сервис "docker-in-docker". Контейнер workspace зависит от него..
docker-in-docker:
image: docker:20.10-dind
Да и в целом, контейнеры достаточно тяжелые. Хотя утилита выглядит удобной на первый взгляд.
Смотрим контейнеры:
docker ps -a -f name="pad" --format 'table {{.Image}}\t{{.Names}}\t{{.Size}}' -s
IMAGE NAMES SIZE
pad-reader-nginx pad-reader-nginx-1 4B (virtual 56.6MB)
pad-reader-php-fpm pad-reader-php-fpm-1 0B (virtual 869MB)
pad-reader-workspace pad-reader-workspace-1 188kB (virtual 1.45GB)
docker:20.10-dind pad-reader-docker-in-docker-1 14.9kB (virtual 336MB)
pad-reader-mysql pad-reader-mysql-1 6B (virtual 577MB)
В то же время контейнеры на базе alpine:
IMAGE NAMES SIZE
sstc/php-laravel:7.3-fpm-alpine onedev-app 9B (virtual 77.6MB)
mysql/mysql-server:5.7 onedev-mysql 86B (virtual 432MB)
По итогу:
./dc.sh stop
./dc.sh down
./dc.sh rm -v
#laradock #docker #docker-compose