Adopting Docker for production applications and services used to be hard. You had to hand-roll a lot of the underlying infrastructure and write lots of custom code for service discovery, load balancing, orchestration, desired state, etc. Today, with he rise of open source container orchestration platforms and cloud native offerings, it's a lot easier to get up and running.