What is Docker
The docker application is open source, it lives on GitHub. The open source version is called Community Edition, or CE, it's free to use. Docker Inc, the company, also supports an Enterprise Edition, which is essentially the same technology stack, but with a few extra features and a support contract.
The community edition and enterprise edition are both about running apps inside of containers. We call apps running in containers containerized apps. Containers are like fast, lightweight virtual machines, and Docker makes running our apps inside of containers really easy.
Running apps in containers
Docker helps you run applications inside of containers. You just take the application code, and build it into an image. Then you store that in a registry, in the cloud for example. You use then that image to spin up your app as containers.
Docker Containers are NOT Virtual Machines
Virtual Machines have the downside that each operating system might have license costs. It also has to be administered by someone to do patches, updates or anti virus. This are all extra costs...
On top of the hypervisor we create a virtual machine for each operating system. A virtual machine is a software construct that acts exactly like a physical server. Each one gets it's own virtual CPU, virtual RAM, virtual disks and virtual network cards. To each installed OS, the virtual machine looks exactly like a physical server.
Each OS "steals" resources, it steals cpu, memory and disk resources in order to run.
In contrast, in a container model, we only have one operating system, running on a physical server. We then slice the Operating System into secure containers. Then, inside the containers we run an app. This, way, we get rid of wasted resources "wasted" in the Virtual Machine environment. the applications also start much faster, because there is not virtual machine and no extra operating system to boot before your app can start.
In a container world, the OS is already up and running. All the apps are securely sharing a single operating system. Most container apps start in less than a second.
Kubernetes is about managing containerized apps at scale, and the focus is very much at the app. It is open source and is used a lot in the cloud. We build a Kubernetes cluster to host our applications, and it can be anywhere, on-premises in your own datacenter or just any cloud, and even on your laptop when you're developing.
We package our apps, tell Kubernetes what they should look, and then Kubernetes will do all the hard stuff of deploying and managing. It will handle scaling, self-healing, running updats, all by itself.
Kupernetes practically edcoples our apps from the underlying environment, meaning we can switch betweeen clouds, we can move back on-prem, and even back to the cloud again.