Laradock – это готовая сборка образов Docker для разработки php-приложений на Laravel. В то время, как Homestead использует виртуальную машину, Laradock использует все плюсы Docker.
Эта статья – короткая инструкция по поднятию Laradock на host-машине с Linux Mint (Debian, Ubuntu).
Для начала вам необходимо установить Docker CE и Docker Compose. Затем можно приступать к шагам, описанным в статье.
У Laradock есть 2 типа установки:
- Установка для одного php-проекта
- Установка для многих php-проектов
Думаю второй вариант более удобен, поэтому выберем его.
В директории с вашими проектами (или будущими проектами) необходимо склонировать репозиторий laradock.
$ ~/projects
$ git clone https://github.com/laradock/laradock.git
В итоге в папке с проектами у вас будет такая структура папок
$ ls ~/projects
laradock
project-1
project-2
После этого в поддиректории laradock можно произвести необходимые настройки.
В данной статье, мы будем настраивать домен laradock-example.local. Создадим под него папку и файл index.php
$ cd ~/projects
$ mkdir laradock-example
$ mkdir laradock-example/public
$ touch laradock-example/public/index.php
Сам index.php можем наполнить таким содержимым:
<?php
phpinfo();
Затем в /etc/hosts добавим такую строку
127.0.0.1 laradock-example.local
Теперь к настройкам laradock. Самое главное, что нам понадобится в поддиректории ~/projects/laradock – настройка виртуальных хостов nginx. Эти настройки находятся в ~/projects/laradock/nginx/sites. Там у вас будет уже 3 файла
- default.conf
- project-1.conf.example
- project-2.conf.example
default.conf реальный конфиг, который будет обрабатываться, так как у него расширение .conf. А остальные 2 файла – просто примеры, любой из которых можно скопировать под именем заканчивающимся на .conf и изменить внутренности.
Скопируем теперь файл project-1.conf.example в ~/projects/laradock/nginx/sites под новым именем laradock-example.conf
В файле нам надо исправить всего 2 строки
server_name laradock-example.local;
root /var/www/laradock-example/public;
С server_name все понятно – это наш домен, который мы придумали для теста. А вот откуда берется /var/www/? Ведь у нас наша папка laradock-example находится в ~/projects.
Папка /var/www/ это куда laradock будет монтировать вашу папку с проектами. В данной статье это – ~/projects. Тоесть папка ~/projects примонтируется внутри контейнера docker в папку /var/www. Поэтому в ней и окажется созданная нами папка laradock-example cо всем содержимым.
Еще в папке ~/projects/laradock нам надо скопировать файл env-example под новым именем .env.
$ cd ~/projects/laradock
$ cp env-example .env
В данном файле можно определять какие сервисы, службы, устанавливтаь для нашего окружения на laradock, какие порты и другие настройки сервисов (служб) использовать. Пока мы не будем здесь ничего менять. Обратим только внимание на эти строки:
### Application Path
# Point to your application code, will be available at `/var/www`.
APPLICATION=../
Как раз здесь в комментарии и говорится, что наша папка будет примонтирована к папке /var/www контейнера. И что наша папка это “../”, тоесть на 1 уровень выше чем ~/projects/laradock, а значит монтироваться будет папка ~/projects вашей host-системы.
Теперь мы можем попробовать запустить наши контейнеры
$ cd ~/projects/laradock/
$ docker-compose up -d nginx php-fpm mysql workspace
Повторные запуски будут запускать наши контейнеры всего за 2-3 секунды. При первом же запуске они будут долго скачиваться и собираться. Так что придется набраться терпения.
Если на вашей host-машине у вас подняты и работают mysql, веб-сервер и ssh_демон, то возможно вы увидите такие ошибки:
ERROR: for laradock_mysql_1 Cannot start service mysql: driver failed programming external connectivity on endpoint laradock_mysql_1 (
d355bfc2bfa476d7146853cba3244dd8b5762fb07d0d084b770fb53b306bd5c1): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: addres
Creating laradock_applications_1 ... done
Creating laradock_workspace_1 ...
Creating laradock_workspace_1 ... error
ERROR: for laradock_workspace_1 Cannot start service workspace: driver failed programming external connectivity on endpoint laradock_w
orkspace_1 (f89da343071bf6b0f9c67c6de18cad1f2470a9828d8576cf8b5f1a9e58da2523): Error starting userland proxy: listen tcp 0.0.0.0:2222:
bind: address already in use
ERROR: for workspace Cannot start service workspace: driver failed programming external connectivity on endpoint laradock_workspace_1
(f89da343071bf6b0f9c67c6de18cad1f2470a9828d8576cf8b5f1a9e58da2523): Error starting userland proxy: listen tcp 0.0.0.0:2222: bind: addre
ss already in use
ERROR: for mysql Cannot start service mysql: driver failed programming external connectivity on endpoint laradock_mysql_1 (d355bfc2bfa
476d7146853cba3244dd8b5762fb07d0d084b770fb53b306bd5c1): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already i
n use
ERROR: Encountered errors while bringing up the project.
Происходят они потому, что нужные порты уже заняты. Выхода 2: менять порты либо выключить сервисы host-машины.
Вот так можно выключить mysql и apache. По этому же принципу можно выключить другие службы.
$ sudo service mysql stop
$ sudo service apache2 stop
После этого необходимо повторно запустить docker-compose. В случае успеха лог в консоли будет короткий:
$ docker-compose up -d nginx php-fpm mysql workspace
Starting laradock_applications_1 ...
Starting laradock_applications_1
Starting laradock_applications_1 ... done
Recreating laradock_workspace_1 ...
Recreating laradock_workspace_1 ... done
Creating laradock_php-fpm_1 ...
Creating laradock_php-fpm_1 ... done
Creating laradock_nginx_1 ...
Creating laradock_nginx_1 ... done
Здесь видно, что наши контейнеры запустились и им присвоены имена laradock_applications_1, laradock_workspace_1, aradock_php-fpm_1 и laradock_nginx_1.
Запуск был с опцией -d, что означает “daemon” – запуск в фоновом режиме.
Специальной командой можно посмотреть список контейнеров и их статус:
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------------
laradock_applications_1 /true Exit 0
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
laradock_nginx_1 nginx Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2223->22/tcp
В браузере уже должен открываться наш сайт http://laradock-example.local и отображать таблицу phpinfo.
Теперь осталось установить laravel. Для этого нам необходимо открыть терминал контейнера workspace:
$ docker-compose exec workspace bash
И уже в нем перейдем в папку /var/www/laradock-example, удалим там все содержимое и установим laravel.
Содержимое можем удалить из под root
# cd /var/www/laradock-example
# rm -R public
# exit
А вот устанавливать Laravel лучше под обычным пользвателем:
$ docker-compose exec --user=laradock workspace bash
$ cd /var/www/laradock-example
$ composer create-project --prefer-dist laravel/laravel .
Вот теперь у нас по адресу http://laradock-example.local в браузере открывается приветсвенная страница с оформлением Laravel.
Когда запущенные контейнеры laradock нам не нужны в памяти нашего компьютера мы можем их выключить:
$ docker-compose stop
Stopping laradock_nginx_1 ... done
Stopping laradock_php-fpm_1 ... done
Stopping laradock_workspace_1 ... done
Stopping laradock_mysql_1 ... done
Кстати, у нас есть еще дефолтный виртуальный хост nginx. К нему будет резольвиться домен, который прописан в hosts, но не имеет собсвенной настройки в nginx. Но чтобы там что-то открывалось нужно немного подправить ~/projects/laradock/nginx/sites/default.conf и/или создать папку public c файлом index.php.
В файле ~/projects/laradock/nginx/sites/default.conf прописана строка:
root /var/www/public;
Ну, а дальше вы поняли.
Вот и весь процесс первичной настройки и запуска.
Полезные команды:
$ docker-compose up -d nginx php-fpm mariadb workspace # Запуск нескольких контейнеров
$ docker-compose ps # Посмотреть список контейнеров и их статус
$ docker-compose stop # Остановить все контейнеры
$ docker-compose down # Удалить все образы
$ docker-compose build php-fpm # Пересобрать контейнер php-fpm. Например, после смены версии php
$ docker logs laradock_mysql_1 # Посмотреть последние строки лога контейнера laradock_mysql_1
$ docker-compose exec --user=laradock workspace bash # Войти в контейнер workspace под обычным пользователем
Примечания:
При работе с mysql возникали проблемы с работой ряда пакетов. Например, с voyager. При использовании вместо mysql контейнера mariadb этих проблем не возникало (docker-compose up -d nginx php-fpm mariadb workspace).
Полезные ссылки:
Просто, быстро и понятно. Спасибо!