I still prefer to use kubernetes for this: https://dewyatt.github.io/articles/continuous-deployment-of-...
Yes, the database can be in a container as well, with a persistent volume.
It's not that much more complex than what you just went through.
It supports rolling updates where one pod (this means container, usually) is updated at a time, with traffic being sent to other pods during that time.
I think the best practice right now is to use a Deployment (alternatively you can initiate a rolling update manually). Using a deployment makes updates as simple as "kubectl patch ...".
It does require a load balancer, which varies from platform to platform. In AWS, I assume it uses an ELB. On premise, you might use contrib/service-loadbalancer (haproxy).