Applications built on Docker are inherently portable, and the process of deployment is the same for every environment. As you promote your application through system tests and user tests to production, you'll use the same artifacts every time. The Docker images you use in production are the exact same versioned images that were signed off in the test environments, and any environmental differences can be captured in compose-file overrides, Docker configuration objects, and secrets.
In a later chapter, I'll cover how continuous deployment works with Docker, so your whole deployment process can be automated. But when you adopt Docker, you'll be moving to a new application platform, and the path to production is about more than just the deployment process. Containerized applications run in fundamentally different ways...