I never used docker but have experienced using vagrant as my main website development for many years but I just stopped there. I know vagrant and docker, the concept still the same. Do not over obsessed with the purpose of this technologies. They are not developed to make your development easy but the point is to make the testing environment better by working with team. Normally if you work with team, you need to use docker or you gonna have miscommunication. So the other people can test your work without asking you "what do I need to run this thing" and you wasted a lot of time for setting up the same environment? if you are like me working alone, I just use private git repo + ftp push. You don't need docker.
Normally this is what I do without docker or vagrant. Only do this if you don't share your server configuration with other team:
1) Create a random dev subdomain for testing purposes like dev.mywebsite.com, install prestashop in here with the database dev_prestashop. You can put more tests in the same server like dev2.mywebsite.com, dev3.mywebsite.com. So the dev.mywebsite.com is like a beta version of the live site in www.mywebsite.com
2) Secure this dev.mywebsite.com with httpd or nginx password and only you and your team can access this
3) Now create an empty git repository inside this directory and push as a new repo at your git online repo (I choose my own hosted gitlab svn.mywebsite.com)
4) Now you have the test server with the same configuration as live server and git-able with your team! The reason I don't see the need of Docker.
So, how do you update changes to live production on www.mywebsite.com? What about the database? Here is how I did it:
1) in the public_html for my dev.mywebsite.com, I created a new folder that stores prestashop sql files -> public_html/mydb/ . Then, I dump the sql file without zip or gz compression (eg. dev-prestashop.sql) so I can detect changes from my private git.
2) If let say I want to commit the dev project, I have to set a rule that I always need to copy a new database inside the directory so it will be synced.
3) Then, for the live production, I can just pull it from the dev repository and make changes there