С докером у вас ваши файлы билдятся в образ (это не обязательно делать на сервере), контейнер из которого можно запустить на тестовом сервере, на машинах у разработчиков или на боевом сервере. Причем на боевом сервере вы просто гасите старый контейнер и запускаете новый. Если что-то не так, переключаете их обратно.
Причем при билде образа вы можете апдейтить файлы операционки и библиотеки внутри до актуальных и прогонять сделанный контейнер по тестам, проверяя не только ваш код, но и совместимость, да и вообще целиком работу.
То есть по сути у вас будет приложение-образ, переносимое, со всеми библиотеками и настройками внутри. При этом база и nginx находятся вне контейнера, например в собственных контейнерах.
Но тут надо понимать, что при таком подходе вам каждый раз на сервер нужно будет передавать (ручками в tgz или через репозиторий) образ, а это обычно сотни мегов.