Как организовать структуру и деплой проекта с docker?
Как мне запулить мой проект на этот серв?
Есть два варианта:
1. через hub.docker.com
а) делаете docker login для регистрации на docker-хабе (можно зайти и сделать свой проект приватным чтобы остальным не повадно было)
б) собираете ваш dockerfile с помощью docker build
в) затем docker push для отправки слоев на ваш хаб 
г) затем логинитесь на боевом сервере и делаете docker pull для скачивания слоев
д) docker run 
2. Просто кидаете с помощью scp ваш Dockerfile и файлы проекта на боевой сервер и делаете 
docker build 
Подробнее о командах можно почитать в документации - я лишь описал концепциюКак затем производить правки в коде?
Все просто - залейте ваш проект в любой репозиторий (github, bitbacker, gitlab ...), после внесения изменений просто логинитесь на сервере, заходите в ваш докер-контейнер и запускаете git pull в нужную директорию, затем сборка или т.п. (для автоматизации процесса можно использовать любой CI). Проекту нужна БД(куда без нее).
Очень просто - добавляете новый контейнер (например docker pull mysql), на хабе можно посмотреть информацию о запуске такого контейнера https://hub.docker.com/_/mysql/ и коннектитесь к базе из вашего приложения по внутренней сети вашей docer-системы (docker bridge).
Я у себя сделал два разных докер файла - один под продакшн, один под девелопмент. Их разница в том, что в продакшн версии помимо настройки окружения выполняется еще и скачивание (git clone) и разворачивание самого приложения. А в девелопмент версии делается монтирование внешней директории с кодом, чтобы жизнь кода не зависила от жизни контейнера.
Бд лучше организовать в отдельный контейнер, с линковкой к контейнеру с приложением (про линковку очень доступно описано в документации).