and the runtime software and dependencies needed to run that application.
Once you have a container image created, you can deploy one or multiple
instances of it to any machine or set of machines (physical or virtual) that are
running the Docker Engine.
One of the greatest advantages of Docker containers is the portability of
container instances. Each container instance is identical to the original image.
The Docker Engine can be run locally on a developer’s machine, in an
isolated development or testing environment, and in production environments.
The application in the container instance should work identically in each
location because details such as networking, storage, and operating system
details are abstracted away.
Typically, a Docker container is created for each separate component in a
larger application or system. This gives you the freedom to update or replace
components without taking the entire system offline. In fact, you could deploy
a new component instance while an older version of the instance is running,
run them side-by-side for a while to compare and test, and then switch over
with little to no downtime—at least in theory. You could deploy additional
instances of a container instance when you discover that your current load is
greater than your system can handle easily, notify your load balancer to add
the additional instances to the pool of resources, and recover from an overload
quickly. Much depends on your design and deployment details.
Kubernetes
As you can imagine, all the convenience of containers comes with a price:
complexity. You must find a way to keep track of each containerized
application, where it is deployed, and so on. To make containers useful
without going insane, you will want to use a container platform that helps you
develop, deploy, and manage applications (or services) across physical,
virtual, and cloud-based servers. Enter Kubernetes.
Kubernetes is based on ideas rooted in years of experience running
production workloads in containers at Google. Google has billions of
containers running applications across data centers all over the world.
Kubernetes is an open source system for automating deployment and
management of containerized applications at whatever scale may be needed,
up to Google-sized complexity. Kubernetes controls scaling, service
discovery, load balancing, and a ton more. It is fully open source and built
through cooperation between many large partners and a community of
developers.