Docker is a tool designed to make applications.Docker provides the ability to package and run an application in a loosely isolated environment called a container. In this it is easier to create, deploy, and run the application with the help of containers. Containers allow a developer to package up all dependencies of an application such as libraries and all other parts and combine it as one package.Container help the developers to run the application without any strain.
Docker is a bit like a virtual machine.Containers are lightweight because they don’t need the extra load of a hypervisor, but run directly within the host machine’s kernel.The key difference between containers and VMs is that while the hypervisor abstracts an entire device, containers just abstract the operating system kernel. Docker allows applications to use the same Linux kernel as the system that they are running on and only requires applications be shipped with things not already running on the host computer.This increases performance and reduces the size of the application.
Docker is open source tool,so that anyone can use it.A Dockerfile is a simple text-file that contains a list of commands that the Docker client calls while creating an event. The best part is that the commands we write in a dockerfile are almost identical to their equivalent Linux commands. This means that we don't really have to learn new syntax to create our own dockerfiles.
Docker is a tool that is designed for both developers and system administrators, making it a part of many DevOps (developers + operations) toolchains. For developers, it means that they can focus on writing code without worrying about the system that it will ultimately be running on. It also allows them to get a head start by using one of thousands of programs already designed to run in a Docker container as a part of their application. For system administrators, Docker gives flexibility and potentially reduces the number of systems needed because of its small size and lower overhead. Docker enables us to separate our applications from our infrastructure so that we can deliver software quickly.
Docker help us to manage our infrastructure in the same ways we manage our applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, we can significantly reduce the delay between writing code and running it in production.The isolation and security allow us to run many containers simultaneously on a single host.As the containers are lightweighted we can run more containers on a given hardware combination than using virtual machines.We can even run Docker containers within host machines that are actually virtual machines as mentioned.VMs run applications inside a guest Operating System, which runs on virtual hardware powered by the server’s host OS.Docker has radically changed the face of the technology landscape.The application directory does contain a Docker file.
Docker provides tooling and a platform to manage the life cycle of the containers:
The CLI uses the Docker REST API to control or interact with the Docker daemon through scripting or direct CLI commands. Many other Docker applications use the underlying API and CLI.Docker streamlines the development lifecycle by allowing developers to work in standardized environments using local containers which provide our applications and services.The Docker client is the primary way that many Docker users interact with Docker. When we use commands such as docker run, the client sends these commands to dockerd, which carries them out. The docker command uses the Docker API. The Docker client can communicate with more than one daemon. Containers are great for continuous integration and continuous development workflows.Docker uses a client-server architecture. The Docker client talks to the Docker daemon, which does the heavy lifting of building, running, and distributing our Docker containers. The Docker client and daemon can run on the same system, or we can connect a Docker client to a remote Docker daemon. The Docker client and daemon communicate using a REST API, over UNIX sockets or a network interface.
A Docker registry stores Docker images. Docker Hub and Docker Cloud are public registries that anyone can use, and Docker is configured to look for images on Docker Hub by default.When we use the docker pull or docker run commands, the required images are pulled from the configured registry. When we use the docker push command, the image needed is pushed to the configured registry. For instance, we can buy a Docker image containing an application or service from a software vendor and use the image to deploy the application for testing, staging, and production environments.Also we can upgrade the application by pulling the new version of the image and redeploying the containers.
When we use Docker, we are creating and using images, containers, networks, volumes, plugins, and other objects.
An image is a read-only template with instructions for creating a Docker container.To bulit up an image we can use dockerfile. A container is a runnable instance of an image.We can create, run, stop, move, or delete a container using the Docker API or CLI also we can connect a container to one or more networks, attach storage to it, or even create a new image based on its current state.