Have you ever wondered why we moved on to container-based applications in an era where we have virtual machine applications? How does docker make the task of development easier? Let’s see what is Docker and know its concepts.
Docker is a light weighted alternatives to a virtual machine (VM) which is designed to make it easier to create, deploy and run applications by using containers. Wikipedia defines Docker as
an open-source project that automates the deployment of software applications inside containers by providing an additional layer of abstraction and automation of OS-level virtualization on Linux.
On any Host OS, we have a docker engine which runs the multiple containers present on it. These docker containers have an application running on it which in turn is equipped with all the binaries and libraries needed to run the application.
But Why Docker?
Before Docker industries were facing challenges where an application developed in one machine worked in developing environment but not in testing or production environment. This is due to the difference in the computing environment between development and production. This is when dockerization makes our task easier.
Docker provides a consistent environment throughout the whole Software Development Life Cycle (SDLC) thereby providing better productivity throughout the life cycle.
Containerization vs Virtualization
In virtualization, every application runs on VM and this VM imports a guest operating system on top of the host OS. This way we can run a different application on the same machine. Now you might be wondering what the problem with virtualization is? One major drawback is that running many VMs on the same host system will degrade the performance of the system. Guest OS running on this host OS has its own set of kernel libraries and dependencies which take up a large number of resources like hard disk processor and RAM and takes up much time to boot up when comes to real-time applications.
Thus containerization was introduced. Here there is no guest OS required, instead, the application will utilize the host OS. Hence, each container will share the host OS and each will have its own application and libraries in it. RAM and disk space will be utilized by the containers according to its requirements thereby boosting the performance of the system considerably.
Key terms in Docker and detailed approach to Docker Networking
Dockerfile is a text file (without any .txt extension) that is used to build a docker image that contains all the project code. This is the file that includes commands and arguments to customize a docker image. Docker can build images automatically by reading the instructions from a Dockerfile.
Commands used in Dockerfile
- FROM – defines a base image to be used to start the build process.
- MAINTAINER – name and email of the maintainer of this image.
- COPY – copies a file or a directory into the image.
- ADD – the same as COPY, which contains two arguments source and destination path.
- RUN – takes a command as an argument and runs it to form the image, such as apt-get install.
- CMD – default command to run when the container is initiated. Can be overridden with command line parameters.
- ENV – sets an environment variable in the container.
- EXPOSE – exposes ports from the container. Must be explicitly exposed by the run command to the Host with -p or -P.
- VOLUME – specifies a directory that is used to store file contents related to container.
- ENTRYPOINT – this is used to override the cmd command. When the container is run, this command is the first one to be executed for the image which is built.
- USER – sets the user for RUN, CMD and ENTRYPOINT.
- WORKDIR – sets the working directory for RUN, CMD, ENTRYPOINT, ADD and COPY.
Reads only templates used to create containers. It contains all the dependencies and requirements for a particular application.
Commands for interacting with images
docker images # shows all images.
docker import # creates an image from a tarball.
docker build # creates an image from Dockerfile.
docker commit # creates an image from a container.
docker rmi # removes an image.
docker history # list changes of an image.
Run time instance of a Docker image. It contains everything needed to run the applications. One or more images can be used to build a container.
Docker Hub is a service provided by Docker for finding and sharing container images with your team. It is also known as a container registry.
It provides the following major features:
- Repositories: Push and pull container images.
- Teams & Organizations: Manage access to private repositories of container images.
- Official Images: Pull and use high-quality container images provided by Docker.
- Publisher Images: Pull and use high- quality container images provided by external vendors. Certified images also include support and guarantee compatibility with Docker Enterprise.
- Builds: Automatically build container images from GitHub and Bitbucket and push them to Docker Hub.
- Webhooks: Trigger actions after a successful push to a repository to integrate Docker Hub with other services.
General Commands for Docker
Commands for interacting with containers :
• docker –version: currently installed version of docker
• docker –help: list of commands available in docker
• docker pull: to pull an image to the docker hub repository
• docker run -it -d: used to create a container from an image
• docker ps: used to list the running containers
• docker ps -a: used to show all the running and exited containers
• docker exec -it bash: used to access the running container
• docker stop: stops a running container
• docker kill: kills the container by stopping its execution immediately
• docker login: used to login to the docker hub repository
• docker push: to push an image to the docker hub repository
• docker rm: used to delete a stopped container
• docker images: list all images in the local repository
• docker build: build an image from a specified docker file
• docker export: used to export a container’s file system as a tar archive
• docker import: used to import the contents from a tarball to create a filesystem image
• docker container: perform various operations on containers
• docker container logs: logs with the specified container
• docker container kill: kill the container
• docker container rm: delete the stopped container
• docker container start: start a container
In a nutshell, here’s what Docker can do: It can get more applications running on the same hardware than other technologies; it makes it easy for developers to quickly create ready-to-run containerized applications, and it makes managing and deploying applications much easier.