Laradock - это готовая сборка образов Docker для разаработки php-приложений на Laravel. В то время, как Homestead использует виртуальную машину, Laradock использует все плюсы Docker.
Эта статья - короткая инструкция по поднятию Laradock на host-машине с Linux Mint (Debian, Ubuntu).
Для начала вам необходимо установить Docker CE и Docker Compose. Затем можно приступать к шагам, описаным в статье.
У Laradock есть 2 типа установки:
Думаю второй вариант более удобен, поэтому выберем его.
В директории с вашими проектами (или будущими проектами) необходимо склонировать репозиторий laradock.
1 2 |
$ ~/projects $ git clone https://github.com/laradock/laradock.git |
В итоге в папке с проектами у вас будет такая структура папок
1 2 3 4 |
$ ls ~/projects laradock project-1 project-2 |
После этого в поддиректории laradock можно произвести необходимые настройки.
В данной статье, мы будем настраивать домен laradock-example.local. Создадим под него папку и файл index.php
1 2 3 4 |
$ cd ~/projects $ mkdir laradock-example $ mkdir laradock-example/public $ touch laradock-example/public/index.php |
Сам index.php можем наполнить таким содержимым:
1 2 |
<?php phpinfo(); |
Затем в /etc/hosts добавим такую строку
1 |
127.0.0.1 laradock-example.local |
Теперь к настройкам laradock. Самое главное, что нам понадобится в поддиректории ~/projects/laradock - настройка виртуальных хостов nginx. Эти настройки находятся в ~/projects/laradock/nginx/sites. Там у вас будет уже 3 файла
default.conf реальный конфиг, который будет обрабатываться, так как у него расширение .conf. А остальные 2 файла - просто примеры, любой из которых можно скопировать под именем заканчиваюмся на .conf и изменить внутренности.
Скопируем теперь файл project-1.conf.example в ~/projects/laradock/nginx/sites под новым именем laradock-example.conf
В файле нам надо исправить всего 2 строки
1 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.
1 2 |
$ cd ~/projects/laradock $ cp env-example .env |
В данном файле можно определять какие сервисы, службы, устанавливтаь для нашего окружения на laradock, какие порты и другие настройки сервисов (служб) использовать. Пока мы не будем здесь ничего менять. Обратим только внимание на эти строки:
1 2 3 4 |
### Application Path # Point to your application code, will be available at `/var/www`. APPLICATION=../ |
Как раз здесь в комментарии и говорится, что наша папка будет примонтирована к папке /var/www контейнера. И что наша папка это "../", тоесть на 1 уровень выше чем ~/projects/laradock, а значит монтироваться будет папка ~/projects вашей host-системы.
Теперь мы можем попробовать запустить наши контейнеры
1 2 |
$ cd ~/projects/laradock/ $ docker-compose up -d nginx php-fpm mysql workspace |
Повторные запуски будут запускать наши контейнеры всего за 2-3 секунды. При первом же запуске они будут долго скачиваться и собираться. Так что придется набраться терпения.
Если на вашей host-машине у вас подняты и работают mysql, веб-сервер и ssh_демон, то возможно вы увидите такие ошибки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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. По этому же принципу можно выключить другие службы.
1 2 |
$ sudo service mysql stop $ sudo service apache2 stop |
После этого необходимо повторно запустить docker-compose. В случае успеха лог в консоли будет короткий:
1 2 3 4 5 6 7 8 9 10 |
$ 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" - запуск в фоновом режиме.
Специальной командой можно посмотреть список контейнеров и их статус:
1 2 3 4 5 6 7 8 |
$ 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:
1 |
$ docker-compose exec workspace bash |
И уже в нем перейдем в папку /var/www/laradock-example, удалим там все содержимое и установим laravel.
Содержимое можем удалить из под root
1 2 3 |
# cd /var/www/laradock-example # rm -R public # exit |
А вот устанавливать Laravel лучше под обычным пользвателем:
1 2 3 |
$ 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 нам не нужны в памяти нашего компьютера мы можем их выключить:
1 2 3 4 5 |
$ 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 прописана строка:
1 |
root /var/www/public; |
Ну, а дальше вы поняли.
Вот и весь процесс первичной настройки и запуска.
Полезные команды:
1 2 3 4 5 6 7 |
$ 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).
Полезные ссылки:
1 comment so far
НикитосДата:6:56 пп - Апр 14, 2020
Просто, быстро и понятно. Спасибо!