Сегодня я расскажу, почему мне больше нравится 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. Он проще и дружелюбнее к начинающим пользователям.
Комментарии
@VasyOK для тебя статья
6 пункт:
docker-compose logs --tail=50 php
Параметр tail указывает, сколько последних сообщений показать.
Или так, чтобы отслеживать
docker-compose logs -f php
3 и 5 - нормально всё делается через траефик
хотя быстро найти инфу действительно не просто
4 пункт вообще непонятно, откуда берётся. Зашёл к машке в контейнер и импортнул через mysql
Можно импортуть и через drush. Проблема, что приходиться копировать дамп базы в крень репы. приходится
*.sql
добавлять в.git/info/exclude
Жить можно, но лишние шаги: вместоdrush sql:cli << /удобый/путь/к_бекапам/файл.эскуэль
надо скопировать в корень, войти в контейнер, сделать дамп, выйти из контейнера, удалить файл.Дамп копировать придётся в любом случае. Не держать же его в репозитории. Кроме того драш при экспорте херит эмоджи. Если эти эмоджи окажутся в метатегах, то получим WSOD на каждой странице, где они были.
https://slides.com/alexanderdubovskoy/deck-7 субъективное сравнение между разными инструментами. docksal тоже есть.
На локале по этому пункту выбор в сторону большей конфигурируемости. Кому-то редис, кому-то 2 базы, кому-то 2 энжинкса, отдельно веб интерфейс сваггера, для Д7 - один конфиг, для д8 - другой и тп.
Тоже конфигурируемость
А тут - да. Прокси не хватает для д4д, тоже плевался. Можно попробовать вынести отдельно траефик, но тут нужно что-то делать.
Один из плюсов докера - у тебя 1 настройки на всех инстансах. Вообще не поддерживаю не использование докера на проде.
docker-compose logs php
?docker logs $container_id
?А попробуй ещё lando - та же штука только с привязкой к пантеону. Или *назови любой другой подобный инструмент* - все аргументы будут примерно те же - более дружеский интерфейс. Но при этом шаг влево и вправо - и начинается такая сильная попаболь, что хочется всё плюнуть и больше никогда не ставить ничего подобного. Нужно разбираться.
Помню мою первую встречу с lando - я заводил xdebug часов 5. При том, что было куча инструкций как это сделать. Ну не работало ничего, хоть тресни. Пришлось дебажить этот ландо. ну или моя попытка добавить изменения в php.ini, это вообще забей. А так - да, всё дружественно, всё круто и прочее прочее.
А как устновить этот docksal, если он проще и дружелюбнее?
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.
Это как?
А это похоже на баг инсталлятора. Попробуй удалить докер перед установкой доксала
А он без докера пойдет?
Нет, он тоже использует докер. Но если докера нет, он должен ставить рекомендованную версию. Потом ее можно обновлять до самой последней
Хорошо, а как удалить Докер?
Вводил все комманды отсюда
https://linux-notes.org/ostanovit-udalit-vse-docker-kontejnery/
Все равно docker --version пишет версию
Тебе не контейнеры надо удалить, а сам пакет докера. Дистрибутив линукса какой у тебя?
kde neon типа убунту
sudo apt-get remove docker docker-engine docker.io containerd runc - тоже пробовал
Не проще ли в менеджере пакетов посмотреть какие пакеты с именем "docker" установлены? У меня это docker-ce docker-ce-cli
Менеджер пактов это (?):
никаких не вижу.
Среди всех пакетов по docker, включая зависимости:
sudo apt-cache search docker
Все установленные пакеты с вхождением docker:
sudo apt list --installed | grep docker
это был, скорее всего, не тот докер, тот docker-ce.
Забыли lando сравнить.
А ddev не забыли? Официально рекомендовано d.o
По-моему дружелюбный, и быстрее lando по субъективным ощущениям.
что там может быть быстрее или не быстрее?
Специально сравнил рецепт для D7 или D8 даёт приблизительно одинаковые результаты:
lando start ~ 28 сек
ddev start ~ 18 сек
Я не хотел бы разбирать подробности, наверняка разные контейнеры и возможно при тонкой настройке можно добиться одинаковых результатов.
Вот, если интересно, урезаный вывод:
[lando] docker ps
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
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
А есть кто-то, кто считает что все эти абстракции, дальше докер-компоуза, абсолютно ненужным излишеством? Или это я "странный"?
Абсолютно поддерживаю. Вообще не могу понять, зачем придумали все эти доксалы и ландо. Вот у меня была недавно задача организовать хранение пользовательских файлов на s3. Взял контейнер minio, почитал доки, погуглил примеры, прописал, что нужно в docker-compose.yml и готово. Уверен, что при использовании любых оболочек эта задача бы многократно усложнилась.
Поддерживаю. )
Я и докер-то считаю не слишком тут полезным. Но разработчикам, которые не могут самостоятельно настроить себе окружение как-то надо его получать. И докер тут просто наиболее простой путь. Хотя доверие к разным внешним контейнерам, это не самая хорошая мысль. И в плане безопасности, и в плане качества их настройки, и в плане оптимальности её для решения конкретных задач.
Ну, с одной из основных своих задач - обеспечением единого окружения для всей команды проекта, докер справляется отлично.
Настройки, вроде, такие же, как и на голом дистре. Разве что, немного с докерфайлами по-возиться, для автоматизации.
Доверие - да, наверн. Как минимум, проверять что там в этих контейнерах поперенастроенно, или оф образы брать.
У меня, в целом, больше всего вопросов не к докеру, как таковому, а к готовым внешним образам, которые часто так себе, даже у производителей ПО. И к тому, что им слишком сильно доверяют, и редко проверяют что там понаделано. А также, к тому, что очень многие рассматривают контейнеры, как законченные решения, с которыми вообще ничего не надо делать, только запускать. Прямо как с хостинг панелями.
Если на продакшн стоят всякие s3, solr и прочие редисы, то не вижу ничего криминального в том, чтобы локально разворачивать эти сервисы в докере, пусть даже в непроверенных и криво сделанных контейнерах.
И не забываем о том, что на продакшн и на локалке нет абсолютно никакой нужды иметь одинаковое окружение. Похожее - да, но ни в коем случае не одинаковое.
жаль в рунете нет нигде мануала от А до Я по установке и насройке docksal с НУЛЯ
на D4D много видое есть а docksal нет(
Установка сводится к одной строке
bash <(curl -fsSL https://get.docksal.io)
А по настройке полно инфы, даже на здесь, на drupal.ru (я пишу периодически)
как запустить composer из контейнера?
его же желательно из контейнера запускать чтобы и зависимости от туда подтягивались?
fin composer
Спасибо. пока на ddev оставновился т.к. на digital ocean есть самое полное описание с поддержкой по разным версиям.
до этого замучался по подустаревшему мануалу niklan(а) ставить d4d. там все никак не мог composer из контейнера запустить (((.
как я понял что composer нужно именно из контейнера запускать чтоб зависимости именно от контейнера подтягивались, ане локальный composer т.к. тогда же зависимости будут не те что в контейнере прописаны.
В docksal - "fin composer" это же из контейнера зависимости будут подтягиваться? Если я правильно понял это как и в DDEV - "ddev composer"
посмотрю может docksal заюзаю.
🤝
Зависимости чего?