Docker was created by Solomon Hykes (Original Author), now it is developed and maintained by Docker INC. Docker is a tool to make application build, ship and deploy irrespective of any Operating System or any environment.
Docker runs on all 3 major Operating System
- Linux
- MacOS
- Microsoft Windows
With Docker we can create, ship and build a isolated environment which we called as Container. Containers are lightweight and we can run multiple containers on single host. Container shares kernel with the host machine.
Docker is client-server application.
Major coomponents of the Docker are
- Docker Daemon Responsible for building, running the docker images.
- Docker Client Docker client interacts with Docker using the docker api.
- Docker Registry Docker images get stores at Docker Registry. Its a sort of git for the docker images.
- Docker Objects
- Images
- Containers
- Services
- Namespaces
Namespaces provides isolation for the process.
- Process ID
- Mount
- IPC (Inter process communication)
- User (currently experimental support for)
- Network
- Cgroups
Cgroups provide resource limitation and reporting capability within the container space. They allow granular control over what host resources are allocated to the containers and when they are allocated.
- CPU
- Memory
- Network Bandwidth
- Disk
- Priority
Containers are not new, but their use for easily deploying applications is.
Containerization is increasingly popular because containers are:
- Flexible: Even the most complex applications can be containerized.
- Lightweight: Containers leverage and share the host kernel.
- Interchangeable: You can deploy updates and upgrades on-the-fly.
- Portable: You can build locally, deploy to the cloud, and run anywhere.
- Scalable: You can increase and automatically distribute container replicas.
- Stackable: You can stack services vertically and on-the-fly.
Docker can be use by Sys Admins, QA, Developers and DevOps. Running application inside docker helps and make application platform independent.
A container runs natively on Linux and shares the kernel of the host machine with other containers. It runs a discrete process, taking no more memory than any other executable, making it lightweight.
By contrast, a virtual machine (VM) runs a full-blown “guest” operating system with virtual access to host resources through a hypervisor. In general, VMs provide an environment with more resources than most applications need.



