Почему я выбираю docksal вместо docker4drupal

Сегодня я расскажу, почему мне больше нравится docksal, а не docker4drupal. Этот вопрос уже обсуждался в телеграм чате, но я решил резюмировать обсуждение в виде статьи.

Скажу сразу, я буду сравнивать docksal и docker4drupal с точки зрения новичков и вебмастеров. К сожалению, многие разработчики стали забывать, что когда-то и они были новичками и то, что сейчас для них очевидно, для других совсем не очевидно. Помните об этом.

1) Централизованная установка и обновление. docksal устанавливается в вашу систему привычным образом, а обновляется командой fin update. Если вы используете стэк приложений по умолчанию, то он сразу обновится во всех контейнерах. d4d же нужно обновлять в каждом контейнере отдельно. Опять таки, в комплекте с d4d идет набор файлов, которые на 99% обычных проектов не нужны: Makefile, traefik.yml, docker-sync.yml. Это сбивает с толку начинающих пользователей d4d.

2) Не нужно нигде прописывать имя проекта. docksal берет имя проекта из имени каталога (как OpenServer на windows). В d4d же нужно обязательно в .env файле прописывать имя и ссылку для проекта. Это затрудняет обновление, потому что "нельзя просто так взять и заменить .env файл на новый". Нужно со старого скопировать имя вашего проекта и вписать в новый. Это такие мелочи, на которые бывалые разработчики не обращают внимания. Многие вообще перестают обновлять d4d потому что лень с этим заморачиваться.

3) Прокси сервер. Сразу после установки docksal будет запущен nginx который будет проксировать все ваши виртуальные хосты. Это позволит вам запустить сразу несколько сайтов одновременно на 80 порту. d4d "из коробки" такого не умеет.

4) Импорт больших баз. Наверняка многие пользователи d4d помнят

the input device is not a TTY при импорте БД через drush

Новичков это очень сбивает с толку. Через PMA БД не грузится, через drush тоже. Как быть? Нужно штудировать документацию, найти там ключ -Т и помнить о нем. В docksal же всё намного проще. Есть централизованная команда fin db import ИМЯ-ДАМПА, которая сама дропнет все таблицы и загрузит данные из файла дампа.

5) На работе мы используем docksal на dev сервере и там есть возможность просто прописать директиву VIRTUAL HOST и доксал автоматом разрулит когда будет обращение к нужному хосту по внешнему адресу и отправит в нужный проект. Например site1.mycompany.com, site2.mycompany.com
Я не сторонник использования докера на проде, но на дев сервере это невероятно удобно. Чтобы сделать такое в d4d нужно долго и внимательно штудировать документацию к traefik.

6) Просмотр логов. Для того, чтобы посмотреть логи веб-сервера достаточно набрать fin logs -f web (а можно и просто fin logs). Сможете ли вы так быстро добраться до логов в d4d?

Приятные мелочи:

7) Установочные скрипты. В docksal есть встроенная возможность добавить к конфигурации сайта установочные скрипты и вызывать их удобным способом fin init-site, например. Скрипт поднимет контейнеры, запустит composer install, скачает БД с дев сервера, импортирует ее. И вот мы имеем готовый сайт для локальной разработки. В d4d можно такое сделать, но вручную.

Резюме:
Если вы давно хотели попробовать докер для локальной разработки, то я рекомендую начать именно с docksal. Он проще и дружелюбнее к начинающим пользователям.

Автор

ivnish Drupal backend developer в компании Abventor

Комментарии

Аватар пользователя gun_dose gun_dose 1 марта в 19:02

6 пункт:
docker-compose logs --tail=50 php

Параметр tail указывает, сколько последних сообщений показать.

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 2 марта в 1:35

3 и 5 - нормально всё делается через траефик
хотя быстро найти инфу действительно не просто

Аватар пользователя gun_dose gun_dose 2 марта в 7:33

4 пункт вообще непонятно, откуда берётся. Зашёл к машке в контейнер и импортнул через mysql

Аватар пользователя Алексей Дёмин Алексей Дёмин 2 марта в 8:03

Можно импортуть и через drush. Проблема, что приходиться копировать дамп базы в крень репы. приходится *.sql добавлять в .git/info/exclude Жить можно, но лишние шаги: вместо drush sql:cli << /удобый/путь/к_бекапам/файл.эскуэль надо скопировать в корень, войти в контейнер, сделать дамп, выйти из контейнера, удалить файл.

Аватар пользователя gun_dose gun_dose 2 марта в 9:20

Дамп копировать придётся в любом случае. Не держать же его в репозитории. Кроме того драш при экспорте херит эмоджи. Если эти эмоджи окажутся в метатегах, то получим WSOD на каждой странице, где они были.

Аватар пользователя zvse zvse 12 марта в 13:28
3

1. Если вы используете стэк приложений по умолчанию, то он сразу обновится во всех контейнерах. d4d же нужно обновлять в каждом контейнере отдельно

На локале по этому пункту выбор в сторону большей конфигурируемости. Кому-то редис, кому-то 2 базы, кому-то 2 энжинкса, отдельно веб интерфейс сваггера, для Д7 - один конфиг, для д8 - другой и тп.

В d4d же нужно обязательно в .env файле прописывать имя и ссылку для проекта

Тоже конфигурируемость

3) Прокси сервер. Сразу после установки docksal будет запущен nginx который будет проксировать все ваши виртуальные хосты. Это позволит вам запустить сразу несколько сайтов одновременно на 80 порту. d4d "из коробки" такого не умеет.

А тут - да. Прокси не хватает для д4д, тоже плевался. Можно попробовать вынести отдельно траефик, но тут нужно что-то делать.

Я не сторонник использования докера на проде

Один из плюсов докера - у тебя 1 настройки на всех инстансах. Вообще не поддерживаю не использование докера на проде.

6) Просмотр логов. Для того, чтобы посмотреть логи веб-сервера достаточно набрать fin logs -f web (а можно и просто fin logs). Сможете ли вы так быстро добраться до логов в d4d?

docker-compose logs php ? docker logs $container_id?

А попробуй ещё lando - та же штука только с привязкой к пантеону. Или *назови любой другой подобный инструмент* - все аргументы будут примерно те же - более дружеский интерфейс. Но при этом шаг влево и вправо - и начинается такая сильная попаболь, что хочется всё плюнуть и больше никогда не ставить ничего подобного. Нужно разбираться.
Помню мою первую встречу с lando - я заводил xdebug часов 5. При том, что было куча инструкций как это сделать. Ну не работало ничего, хоть тресни. Пришлось дебажить этот ландо. ну или моя попытка добавить изменения в php.ini, это вообще забей. А так - да, всё дружественно, всё круто и прочее прочее.

Аватар пользователя VasyOK VasyOK 13 апреля в 23:21

А как устновить этот docksal, если он проще и дружелюбнее?

$ docker --version
Docker version 19.03.8, build afacb8b7f0
$ bash <(curl -fsSL https://get.docksal.io)
.......................................................................
ERROR:  Docker version should be 19.03.4 or greater.
        Automated Docker installation is not supported on this platform.
        Install Docker 19.03.4 or greater manually and run Docksal installation again.

Это как?

Аватар пользователя ivnish ivnish 14 апреля в 7:16

А это похоже на баг инсталлятора. Попробуй удалить докер перед установкой доксала

Аватар пользователя ivnish ivnish 14 апреля в 10:21

Нет, он тоже использует докер. Но если докера нет, он должен ставить рекомендованную версию. Потом ее можно обновлять до самой последней

Аватар пользователя ivnish ivnish 14 апреля в 14:20

Тебе не контейнеры надо удалить, а сам пакет докера. Дистрибутив линукса какой у тебя?

Аватар пользователя ivnish ivnish 14 апреля в 17:19

Не проще ли в менеджере пакетов посмотреть какие пакеты с именем "docker" установлены? У меня это docker-ce docker-ce-cli

Аватар пользователя bsyomov bsyomov 17 апреля в 18:01
1

Среди всех пакетов по docker, включая зависимости:
sudo apt-cache search docker

Все установленные пакеты с вхождением docker:
sudo apt list --installed | grep docker

sudo apt-get remove docker

это был, скорее всего, не тот докер, тот docker-ce. Smile

Аватар пользователя graceman9 graceman9 17 апреля в 19:29

А ddev не забыли? Официально рекомендовано d.o
По-моему дружелюбный, и быстрее lando по субъективным ощущениям.

Аватар пользователя graceman9 graceman9 21 апреля в 20:51
1

Специально сравнил рецепт для D7 или D8 даёт приблизительно одинаковые результаты:
lando start ~ 28 сек
ddev start ~ 18 сек
Я не хотел бы разбирать подробности, наверняка разные контейнеры и возможно при тонкой настройке можно добиться одинаковых результатов.

Вот, если интересно, урезаный вывод:
[lando] docker ps

IMAGE                               NAMES
bitnami/mysql:5.7.29-debian-10-r51  d885_database_1
devwithlando/php:7.2-apache-2       d885_appserver_1
traefik:1.6.3-alpine                landoproxyhyperion5000gandalfedition_proxy_1

[ddev] docker ps

IMAGE                                                        NAMES
drud/ddev-router:v1.13.0                                     ddev-router
phpmyadmin/phpmyadmin:5                                      ddev-drupal-8.8.5-dba
drud/ddev-webserver:v1.13.1-drupal-8.8.5-built               ddev-drupal-8.8.5-web
drud/ddev-dbserver-mariadb-10.2:v1.13.0-drupal-8.8.5-built   ddev-drupal-8.8.5-db
drud/ddev-ssh-agent:v1.13.0-built                            ddev-ssh-agent
Аватар пользователя bumble bumble 18 апреля в 13:12
3

А есть кто-то, кто считает что все эти абстракции, дальше докер-компоуза, абсолютно ненужным излишеством? Или это я "странный"? Scratch one-s head

Аватар пользователя gun_dose gun_dose 18 апреля в 22:53

Абсолютно поддерживаю. Вообще не могу понять, зачем придумали все эти доксалы и ландо. Вот у меня была недавно задача организовать хранение пользовательских файлов на s3. Взял контейнер minio, почитал доки, погуглил примеры, прописал, что нужно в docker-compose.yml и готово. Уверен, что при использовании любых оболочек эта задача бы многократно усложнилась.

Аватар пользователя bsyomov bsyomov 19 апреля в 8:41

Я и докер-то считаю не слишком тут полезным. Smile Но разработчикам, которые не могут самостоятельно настроить себе окружение как-то надо его получать. И докер тут просто наиболее простой путь. Хотя доверие к разным внешним контейнерам, это не самая хорошая мысль. И в плане безопасности, и в плане качества их настройки, и в плане оптимальности её для решения конкретных задач.

Аватар пользователя bumble bumble 19 апреля в 9:42

Ну, с одной из основных своих задач - обеспечением единого окружения для всей команды проекта, докер справляется отлично.

Настройки, вроде, такие же, как и на голом дистре. Разве что, немного с докерфайлами по-возиться, для автоматизации.

Доверие - да, наверн. Как минимум, проверять что там в этих контейнерах поперенастроенно, или оф образы брать.

Аватар пользователя bsyomov bsyomov 19 апреля в 11:05
1

У меня, в целом, больше всего вопросов не к докеру, как таковому, а к готовым внешним образам, которые часто так себе, даже у производителей ПО. И к тому, что им слишком сильно доверяют, и редко проверяют что там понаделано. А также, к тому, что очень многие рассматривают контейнеры, как законченные решения, с которыми вообще ничего не надо делать, только запускать. Прямо как с хостинг панелями. Smile

Аватар пользователя gun_dose gun_dose 19 апреля в 15:56

Если на продакшн стоят всякие s3, solr и прочие редисы, то не вижу ничего криминального в том, чтобы локально разворачивать эти сервисы в докере, пусть даже в непроверенных и криво сделанных контейнерах.

И не забываем о том, что на продакшн и на локалке нет абсолютно никакой нужды иметь одинаковое окружение. Похожее - да, но ни в коем случае не одинаковое.