So, are you preparing for docker interviews and looking for frequently asked docker interview questions? Well, you have landed at the right place. It can be overwhelming to find many Docker interview questions online but going through all of them can be very time-consuming. In this blog, I will talk about the popular docker interview questions that you must know in order to crack your Docker DevOps interviews with ease. We will be looking at the interview questions which a typical DevOps engineer faces in an interview. This is both for people who are new to the DevOps or container world and people who are experienced in other fields like Linux or production support and are willing or wanting to move to DevOps. So, let us get started!
What is Docker?
Docker is a very popular tool in the DevOps domain. It is used to automate the deployment of applications in containers that are lightweight. With Docker, applications can work efficiently in different environments. Docker was initially released in 2013 and since then has become the go-to solution for containerization.
What is a container?
Containers are an environment where you deploy your applications bundled with all necessary configuration files and dependencies. The same OS kernel is shared between all of the elements.
Differentiate between virtualization and containerization.
Virtualization helps developers to run and host multiple OS on the hardware of a single physical server. These virtual machines form an abstraction of the system hardware layer. This means that each virtual machine on the host acts as a physical machine.
Containerization helps developers to deploy multiple applications using the same operating system on a single virtual machine or server. Containers form an abstraction of the application layer which means that each container constitutes a different application.
Describe a Docker container’s lifecycle.
Below is the most common way to showcase the docker container lifecycle:
- Create container
- Run container
- Pause container
- Unpause container
- Start container
- Stop container
- Restart container
- Kill container
- Destroy container
What is Docker most notable features?
Below are the most popular features of Docker:
- Easy and aster configuration
- Application isolation
- Developer productivity
- Better Software Delivery
- Rapid scaling of Systems
- Operational efficiencies
- Placement and affinity
- Version control
- Security Management
What are the components in the Docker architecture?
Docker is the most popular containerization environment. It uses a client-server architecture.
- The docker client is a service that runs in a command line, and the command is translated using REST API and is sent to the Docker daemon (server).
- Docker daemon runs as a REST API and accepts the requests and interacts with the operating system to build the docker images and run the docker containers.
- And then, the docker image is a template of instructions that is used to create containers.
- The docker container is an executable package of applications, and it’s dependencies together.
- Then finally, the docker registry is a service to host and distribute Docker images among other users.
What are the advantages of Docker over virtual machines?
This is something that comes up very consistently. You may want to even extend it as to what are the differences between having a dedicated machine (a virtual machine) and a docker or Docker-like environment are. The arguments for Docker are just absolutely fantastic.
- First of all, Docker containers occupy significantly less space than a virtual machine or a dedicated machine.
- The boot-up time on Docker is significantly faster than a VM.
- Containers have a much better performance as they are hosted in a single docker image, while running multiple virtual machines leads to unstable performance.
- Docker is highly efficient and very easy to scale, particularly when you start working with Kubernetes. VMs have low efficiency and are difficult to scale up.
- Docker containers are easily portable across multiple platforms, while VMs face compatibility issues.
- For space allocation, docker volumes can be shared and reused among multiple containers, while the data volumes of a virtual machine cannot be shared.
The argument against virtual machines is significant, particularly if you are going into an environment where a company is still using dedicated hardware and has not moved to a cloud. Your arguments for Docker can be very persuasive, and you need to be very clear on the advantages for Docker over a virtual machine because you also need to share them with your team. This is important when you are going through the interview process and equally important, particularly when you are working with a company transitioning or going through a digital transformation where they are not used to working with tools like Docker. So, there you need to be able to effectively share with that team what the benefits are of Docker over a virtual machine.
What are the differences between docker image and docker containers?
The docker images are templates of a docker container. An image is built using a dockerfile. It then stores that dockerfile in a docker repository or a dockerhub. And the image layer is a read-only file system.
The docker container is a collection of the runtime instances of a docker image. The containers are created using docker images, and they are stored in the docker daemon. And every container layer is a read/write file system, so you cannot replace the information, you can only append to it.
What is a DockerHub?
It is a public cloud-based registry provided by Docker for storing public images of the containers along with the provision of finding and sharing them. The images can be pushed to DockerHub through the docker push command.
How to create a docker container?
Let understand this by understanding the steps to create a MySQL container.
First, you need to build a docker image or pull from an existing docker image from a docker repository like dockerhub. And then Docker will create a new container that has MySQL from the existing docker image. Simultaneously the layer of the read-write filesystem is also created on top of that image layer.
Command to create docker container –> docker run -t -i MySQL
What is the use of a dockerfile?
A dockerfile is used for creating docker images using the build command. It is a text document that contains all the commands a user could call on the command line to assemble an image. Traditionally, the Dockerfile is called Dockerfile and is located in the root of the context. The Docker daemon runs the instructions in the Dockerfile one by one, committing the result of each instruction to a new image if necessary, before finally outputting the ID of your new image.
Suppose you have 3 containers running, and out of these, you wish to access one of them. How do you access a running container?
The following command lets us access a running container using the container id:
docker exec -it <container id> bash
How do you share docker containers with different nodes?
In this instance, what you want to do is leverage the power of the docker swarm. So docker swarm is a tool that allows the IT administrators and developers to create and manage clusters of swarm nodes within the docker platform. And there are two elements to the node: the manager node and the worker nodes. As you would assume, the manager node manages the entire infrastructure, and the worker node is actually the agent’s work as it gets executed.
Below is the command to create a docker swarm and an example of what a manager node would look like:
docker swarm init –advertise-addr <MANAGER-IP>
Once you have created a swarm on your manager node, you can now add worker nodes to that swarm. Again, when you are stepping through this process, be very precise in the execution part to effectively create a swarm. When a node is initialized as a manager node, it immediately creates a token. This token is used for the worker nodes and associating the IP address with the worker nodes.
docker swarm join \ –token dfgtr5y56y56y67u6777-6y56y5y56yy5-frft5t4 \ 196.168.31.156:3066
How to run multiple containers using a single service?
It is possible to run multiple containers as a single service by using Docker compose. Docker compose will actually run each of the services in isolation, but they can interact with each other. The language you use to write out the compose files that allow you to run the service is called YAML, and YAML stands for yet another markup language.
Instead of YAML, what can be an alternate file to build Docker compose?
YAML is the default option for Docker compose, but you can also use JSON. So if you are comfortable working with JSON, you will be able to use that to name your files, and it is a logical way of being able to do value paired matching using a driver script like syntax:
docker-compose -f docker-compose.json up
What is the difference between a registry and a repository?
Docker registry is an open source server-side service used for hosting and distributing docker images. In contrast, repositories are a collection or multiple versions of a docker image.
In a docker registry, a user can distinguish between docker images with their tag names, and then finally, on the registry, Docker also has its own default registry called dockerhub. The repository has multiple versions of docker images. It is stored in a docker registry and has two types, i.e., public and private repositories, so you can actually create your own enterprise repo.
What are the cloud platforms that support Docker?
You can list all the cloud platforms names you know, all of them support Docker. The most common names are Amazon Web Services, Microsoft Azure, Google Cloud, Rackspace, but you could also add IBM Bluemix, RedHat, etc. So, any of the cloud service providers out there today do support docker, and it has become an industry-standard.
What is the purpose of expose and publish commands in Docker?
- Expose is an instruction used in dockerfile, whereas publish is used in docker run command.
- Expose is used to expose ports within a docker network, whereas publish is used outside of a docker environment.
- Expose is a documenting instruction used at the time of building an image and running a container, whereas publish is used to map a host port to a running container port.
- “Expose” is the command used in Docker, whereas for publish we use the command -p or –publish on Docker.
- Expose 8080 is a sample example, and for publish the example can be docker run -d -p 0.0 0.80:80
Final Thoughts
Containerization is an integral part of the DevOps lifecycle, so there is plenty to learn about Docker. Do not just mug up these answers, understand the technicalities of these answers also. You can find thousands of Docker interview questions online, but these are the top Docker interview questions that you must know, and these are the questions that will give you a kickstart to your future DevOps interviews. So, prepare well and all the best!