Laradock для Laravel

Категория: 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

категория: Laravel