Использовать докер в продакшене - нормальное решение?
Да, но есть один нюанс... Судя по вашему вопросу, вы его точно не учли.
Не упустил ли я какие-то важные команды, которые не используются при разработке, но нужны перед сборкой продакшена?
Выкидываете build и git, создаёте docker registry, предварительно собираете образы (без гита, только полезные файлы в slim образе), пушите их в реестр, на проде прописываете нужные образы нужных версий. Поднимаете через compose + устанавливаете restart = unless stopped.
после чего память на сервере закончилась
Выкидываете git, делаете docker system prune раз в месяц, ставите в настройках демона ротацию логов.
Автоматический бекап базы данных - ответственность самого сервиса (в коде делать дамп), докера (использовать какой-то image для бекапов) или сервера (непосредственно на сервере настроить крон)?
Docker image не используется для бэкапов, потому что он не может изменять свои файлы. Файлы изменяются в контейнерах, volume или маунтах.
Поэтому бэкап - это задача сервера. Только бэкапить надо не рядом с базой, а на другой сервер.
Как не терять данные из бд при перезапусках контейнера?
Контейнер не теряет файлы при перезапуске. Скорее всего, вы его тупо удаляете, а затем пересоздаёте.
Но тк приложение работает в докере, я не могу выполнить nano app.logs для просмотра логов.
Писать логи в другое место/ docker attach / docker cp / экспорт логов и метрик в сервис мониторинга.
p.s.
Вот вам
линтер для обучения.