Как правильно делать изменения в docker-compose.yml и файлах Drupal 9 проекта если контейнера уже запущены?

Аватар пользователя Joseph Joseph 7 августа в 20:05

Я установил 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 stop    // остановить запущенные контейнеры
docker-compose rm // удалить остановленные контейнеры

Поправить все что нужно. И снова запустить:

docker-compose up -d

Так правильно делать? Или нужно как-то по другому?
-----------------------------------------------------------------------------------------------------------------------------
Ситуация №2:

Все настроено хорошо, запустил все необходимые контейнеры, установил Drupal 9 сайт в контейнере. А потом создал саб тему, добавил контент используя адимнку Drupal и соотвественно у меня добавились записи в базе данных, написал код в php, js, css файлах, и т.д.

Как мне теперь зафиксировать изменения? Какие команды нужно написать в терминале?
Например в такой технологии как git это делается командами:

git add .
git commit -m "first"

А в Docker как это делается? Возможно будет ситуация когда мне нужно будет откатить контейнер на версию ниже.

Комментарии

Аватар пользователя ivnish ivnish 7 августа в 20:07
1

Joseph wrote: установил Drupal 9 сайт в контейнере

А зачем сайт ставить в контейнере? В этом есть какая-то необходимость? Сайты обычно лежат локально и монтируются в докер при запуске контейнеров

Аватар пользователя Joseph Joseph 7 августа в 20:42

Вы мне в предыдущем моем вопросе советовали посмотреть это видео:
https://www.youtube.com/watch?v=VEIOmxAnoTg
Посмотрите бегло с 40 по 46 минуту.
Там автор как раз таки сайт ставит в контейнере. Или я может неправильно изьясняюсь.
Ну он скачал docker4drupal папку где есть образы php, mariadb, apache и т.д., скопировал в папку проекта, запустил образы и они стали контейнерами, потом он с drupal.org скачал drupal проект и вставил в папку проекта, вписал в урл адрес, тогда и появилась установочная страница Drupal

Аватар пользователя ivnish ivnish 7 августа в 20:59
1

Joseph wrote: Ну он скачал docker4drupal папку где есть образы php, mariadb, apache и т.д., скопировал в папку проекта, запустил образы и они стали контейнерами, потом он с drupal.org скачал drupal проект и вставил в папку проекта, вписал в урл адрес, тогда и появилась установочная страница Drupal

Всё так, только файлы сайта фактически не находятся в контейнерах и фиксировать их там никак не надо

Аватар пользователя Joseph Joseph 7 августа в 21:08

Ок. По ситуации №2 вы ответили. Спасибо.
А по ситуации №1 можете что-то сказать?
1. docker-compose stop // остановить запущенные контейнеры
2. docker-compose rm // удалить остановленные контейнеры
3. Правка docker.compose.yml .env Dockerfile
4. Повторно запускаю docker-compose up -d
Так нужно делать?

Аватар пользователя ivnish ivnish 7 августа в 21:24
1

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

Аватар пользователя gun_dose gun_dose 7 августа в 23:24
1

Если поменять docker-compose.yml, то по команде docker-compose up -d изменённые контейнеры перезапустятся и пересоздадутся автоматически. То есть ничего останавливать или удалять не нужно.

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

Аватар пользователя Joseph Joseph 7 августа в 23:43

А если поменять Dockerfile или .env также не нужно останавливать/удалять контейнеры?

И то, и другое, по-хорошему должно быть смонтировано.

Что значит смонтировано? Тоесть запущен образ php и образ mariadb?

Аватар пользователя gun_dose gun_dose 8 августа в 0:20
1

В docker-compose.yml у некоторых контейнеров указан параметр volumes. Он отвечает за то, какая папка внутри контейнера монтируется на основную машину. Монтирование - это когда файлы лежат не в контейнере, а на компе, но при этом контейнер видит эту папку и пользуется ей, как своей. Если не монтировать ничего на свою машину, то все файлы будут храниться внутри контейнера, и по команде docker-compose down будут утеряны безвозвратно. И тут надо понимать, что база данных сами данные хранит тоже в каких-то файлах. И вот их то и надо хранить не в контейнере, а на своём компе. Кстати, бывало такое, что докер глючил сам по себе и все данные из него терялись. Это ещё одна из причин, почему монтировать надо не только код, но и базу.

По поводу изменений в .env: docker-compose up -d должно быть достаточно.
По поводу изменений в Dockerfile: если образ не билдится прямо в docker-compose, то нужно сначала принудительно запустить билд образа, а потом рестартануть сборку