Я установил Docker и Docker Composer а также скачал c гитхаба последний релиз
https://github.com/wodby/docker4drupal где есть образы php, mariadb, apache и т.д. и положил в папку моего проекта /var/www/html/mydrupaldocker , и после запуска образов из этой папки, перейду к установке drupal 9.
Далее сделал настройки в файлах .env
и docker-compose.yml
и запустил контейнера командой:
docker-compose up -d
Делаю все по видео:
https://www.youtube.com/watch?v=VEIOmxAnoTg
Можете бегло посмотреть где-то с 25 минуты.
И у меня вопрос по двум сценариям развития событий:
---------------------------------------------------------------------------------------------------------------------------
Ситуация №1:
Я сделал ошибки:
1. В файле docker-compose.yml
у меня закомментированный код который отвечает за образ php. Соответственно контейнер php не был запущен.
2. В файле docker-compose.yml
неправильно настроен traefik. И вылетает ошибка.
3. Хочу в другом месте компьютера разместить Drupal9 проект (не критично, но желательно)
Могу сделать:
docker-compose rm // удалить остановленные контейнеры
Поправить все что нужно. И снова запустить:
docker-compose up -d
Так правильно делать? Или нужно как-то по другому?
-----------------------------------------------------------------------------------------------------------------------------
Ситуация №2:
Все настроено хорошо, запустил все необходимые контейнеры, установил Drupal 9 сайт в контейнере. А потом создал саб тему, добавил контент используя адимнку Drupal и соотвественно у меня добавились записи в базе данных, написал код в php, js, css файлах, и т.д.
Как мне теперь зафиксировать изменения? Какие команды нужно написать в терминале?
Например в такой технологии как git это делается командами:
git commit -m "first"
А в Docker как это делается? Возможно будет ситуация когда мне нужно будет откатить контейнер на версию ниже.
Комментарии
А зачем сайт ставить в контейнере? В этом есть какая-то необходимость? Сайты обычно лежат локально и монтируются в докер при запуске контейнеров
Вы мне в предыдущем моем вопросе советовали посмотреть это видео:
https://www.youtube.com/watch?v=VEIOmxAnoTg
Посмотрите бегло с 40 по 46 минуту.
Там автор как раз таки сайт ставит в контейнере. Или я может неправильно изьясняюсь.
Ну он скачал docker4drupal папку где есть образы php, mariadb, apache и т.д., скопировал в папку проекта, запустил образы и они стали контейнерами, потом он с drupal.org скачал drupal проект и вставил в папку проекта, вписал в урл адрес, тогда и появилась установочная страница Drupal
Всё так, только файлы сайта фактически не находятся в контейнерах и фиксировать их там никак не надо
Ок. По ситуации №2 вы ответили. Спасибо.
А по ситуации №1 можете что-то сказать?
1. docker-compose stop // остановить запущенные контейнеры
2. docker-compose rm // удалить остановленные контейнеры
3. Правка docker.compose.yml .env Dockerfile
4. Повторно запускаю docker-compose up -d
Так нужно делать?
Я не использую d4d уже давно, но думаю, что можно обойтись без удаления контейнеров. Тем более при удалении всех контейнеров будет удаляться база данных сайта
Разрешите поинтересеваться чем сейчас пользуются более опытные разработчики как Вы?
Docksal https://drupal.ru/docs/veb-masteram-i-vladelcam-saytov/pochemu-ya-vybira...
Если поменять docker-compose.yml, то по команде docker-compose up -d изменённые контейнеры перезапустятся и пересоздадутся автоматически. То есть ничего останавливать или удалять не нужно.
По поводу файлов, нужно подключать волюмы для php и mariadb. Для пхп он по умолчанию включен, а для базы закомментирован. И то, и другое, по-хорошему должно быть смонтировано.
А если поменять Dockerfile или .env также не нужно останавливать/удалять контейнеры?
Что значит смонтировано? Тоесть запущен образ php и образ mariadb?
В docker-compose.yml у некоторых контейнеров указан параметр volumes. Он отвечает за то, какая папка внутри контейнера монтируется на основную машину. Монтирование - это когда файлы лежат не в контейнере, а на компе, но при этом контейнер видит эту папку и пользуется ей, как своей. Если не монтировать ничего на свою машину, то все файлы будут храниться внутри контейнера, и по команде docker-compose down будут утеряны безвозвратно. И тут надо понимать, что база данных сами данные хранит тоже в каких-то файлах. И вот их то и надо хранить не в контейнере, а на своём компе. Кстати, бывало такое, что докер глючил сам по себе и все данные из него терялись. Это ещё одна из причин, почему монтировать надо не только код, но и базу.
По поводу изменений в .env: docker-compose up -d должно быть достаточно.
По поводу изменений в Dockerfile: если образ не билдится прямо в docker-compose, то нужно сначала принудительно запустить билд образа, а потом рестартануть сборку