Docker was created as the internal tool in the platform as a service company, dotCloud .
In March 2013, it was released to the public as open source.Its source code is freely available to everyone on GitHub at: https://github.com/docker/docker.
Kubernetes is a tool developed by Google for deploying containers across clusters of computers.It compliments Docker when it comes to orchestration, automating deployment, managing and scaling containers; it manages workloads for Docker nodes by keeping container deployments balanced across a cluster.
Kubernetes also provides ways for containers to communicate with each other, without the need for opening network ports.
Kubernetes is also an open source project, living on the GitHub at https://github.com/ kubernetes/kubernetes.
The idea behind Docker
The idea behind Docker is to pack an application with all the dependencies it needs into a single standardized unit for the deployment called as image.Those dependencies can be binaries, libraries, JAR files, configuration files, scripts and so on.
Docker wraps up all of it into a complete filesystem that contains everything your Java application needs to run the virtual machine itself, the application server such as Wildfly or Tomcat, the application code, runtime libraries and basically everything you would install and deploy on the server to make your application run.
Packaging all of this into a complete image guarantees that it is portable; it will always run in the same way, no matter what environment it is deployed in.
With Docker, you can run Java applications without having to install a Java runtime on the host machine.
All the problems related to incompatible JDK or JRE, wrong version of the application server, and so on are gone.Upgrades are also easy and effortless, you just run the new version of your container on the host.
If you need to do some cleanup, you can just destroy the Docker image and it’s as though nothing ever happened.
Think about Docker, not as a programming language or a framework, but rather as a tool that helps in solving the common problems such as installing, distributing and managing the software. It allows developers and DevOps to build, ship, and run their code anywhere.
Having all of your application code and runtime dependencies packaged as a single and complete unit of software may seem the same as a virtualization engine, but it’s far from that, as we will explain difference between Virtualization and Containerization in next section.