Laradock

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).

Полезные ссылки:

One comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *