Docker Interview Questions
Docker Interview Questions
In Docker, Docker File is used for creating Docker Images using the build command
WHAT IS DOCKER?
Docker is a containerization platform that packages your application and all its dependencies
together in the form of Containers to ensure that your application works seamlessly in any
environment.
As you can see in the diagram on the right, each application will run on a separate container
and will have its own set of libraries and dependencies. This also ensures that there is process
level isolation, meaning each application is independent of other applications, giving
developers surety that they can build applications that will not interfere with one another.
As a developer, I can build a container which has different applications installed on it and
give it to my QA team who will only need to run the container to replicate the developer
environment.
Docker image is the source of Docker container. In other words, Docker images are used to create
containers. Images are created with the build command, and they’ll produce a container when
started with run. Images are stored in a Docker registry such as http://registry.hub.docker.com
because they can become quite large, images are designed to be composed of layers of other
images, allowing a minimal amount of data to be sent when transferring images over the network.
This is a very important question so just make sure you don’t deviate from the topic and I will
advise you to follow the below mentioned format:
Docker containers include the application and all of its dependencies, but share the kernel with
other containers, running as isolated processes in user space on the host operating system. Docker
containers are not tied to any specific infrastructure: they run on any computer, on any
infrastructure, and in any cloud.
Now explain how to create a Docker container, Docker containers can be created by either
creating a Docker image and then running it or you can use Docker images that are present on the
Dockerhub.
5. What is Docker?
Since its a Docker interview, there will be an obvious question about what is Docker. Start with a
small definition.
Docker is a containerization platform which packages your application and all its dependencies
together in the form of containers so as to ensure that your application works seamlessly in any
environment, be it development, test or production. Docker containers, wrap a piece of software
in a complete filesystem that contains everything needed to run: code, runtime, system tools,
system libraries, etc. It wraps basically anything that can be installed on a server. This guarantees
that the software will always run the same, regardless of its environment.
Docker containers include the application and all of its dependencies. It shares the kernel with
other containers, running as isolated processes in user space on the host operating system. Docker
containers are not tied to any specific infrastructure: they run on any computer, on any
infrastructure, and in any cloud. Docker containers are basically runtime instances of Docker
images.
When you mention Docker images, your very next question will be “what are Docker images”.
Docker image is the source of Docker container. In other words, Docker images are used to create
containers. When a user runs a Docker image, an instance of a container is created. These docker
images can be deployed to any Docker environment.
Docker images create docker containers. There has to be a registry where these docker images
live. This registry is Docker Hub. Users can pick up images from Docker Hub and use them to create
customized images and containers. Currently, the Docker Hub is the world’s largest public
repository of image containers.
A server which is a type of long-running program called a daemon process (the docker
command).
A REST API which specifies interfaces that programs can use to talk to the daemon and instruct it
what to do.
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.
Let’s start by giving a small explanation of Dockerfile and proceed by giving examples and
commands to support your arguments.
Docker can build images automatically by reading the instructions from a file called Dockerfile. A
Dockerfile is a text document that contains all the commands a user could call on the command
line to assemble an image. Using docker build, users can create an automated build that executes
several command-line instructions in succession.
The interviewer does not just expect definitions, hence explain how to use a Dockerfile which
comes with experience. Have a look at this tutorial to understand how Dockerfile works.
Docker Compose is a YAML file which contains details about the services, networks, and volumes
for setting up the Docker application. So, you can use Docker Compose to create separate
containers, host them and get them to communicate with each other. Each container will expose a
port for communicating with other containers.
You are expected to have worked with Docker Swarm as it’s an important concept of Docker.
Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts into a single, virtual
Docker host. Docker Swarm serves the standard Docker API, any tool that already communicates
with a Docker daemon can use Swarm to transparently scale to multiple hosts.
A namespace is one of the Linux features and an important concept of containers. Namespace
adds a layer of isolation in containers. Docker provides various namespaces in order to stay
portable and not affect the underlying host system. Few namespace types supported by Docker –
PID, Mount, IPC, User, Network
This is one of the most popular questions asked in Docker interviews. Docker containers have the
following lifecycle:
Create a container
Docker machine is a tool that lets you install Docker Engine on virtual hosts. These hosts can now
be managed using the docker-machine commands. Docker machine also lets you provision Docker
Swarm Clusters.
16. How to check for Docker Client and Docker Server version?
The following command gives you information about Docker Client and Server versions:
$ docker version
17. How do you get the number of containers running, paused and stopped?
You can use the following command to get detailed information about the docker installed on
your system.
You can get the number of containers running, paused, stopped, the number of images and a lot
more.
18. If you vaguely remember the command and you’d like to confirm it, how will you get help on
that particular command?
The following command is very useful as it gives you help on how to use a command, the syntax,
etc.
$ docker --help
The above command lists all Docker commands. If you need help with one specific command, you
can use the following syntax:
$ docker login
You’ll be prompted for your username and password, insert those and congratulations, you’re
logged in.
20. If you wish to use a base image and make modifications or personalize it, how do you do that?
You pull an image from docker hub onto your local system
Pull an image from docker repository with the above command and run it to create a container.
Use the following command:
Most probably the next question would be, what does the ‘-d’ flag mean in the command?
-d means the container needs to start in the detached mode. Explain a little about the detach
mode. Have a look at this blog to get a better understanding of different docker commands.
$ docker ps
23. Suppose you have 3 containers running and out of these, you wish to access one of them. How
do you access a running container?
25. Can you use a container, edit it, and update it? Also, how do you make it a new and store it on
the local system?
Of course, you can use a container, edit it and update it. This sounds complicated but its actually
just one command.
26. Once you’ve worked with an image, how do you push it to docker hub?
Once you’ve written a Dockerfile, you need to build it to create an image with those specifications.
Use the following command to build a Dockerfile:
The next question would be when do you use “.dockerfile_name” and when to use the entire
path?
Use “.dockerfile_name” when the dockerfile exits in the same file directory and you use the entire
path if it lives somewhere else.
30. Do you know why docker system prune is used? What does it do?
The above command is used to remove all the stopped containers, all the networks that are not
used, all dangling images and all build caches. It’s one of the most useful docker commands.
Once the interviewer knows that you’re familiar with the Docker commands, he/she will start
asking about practical applications This section of Docker Interview Questions consists of
questions that you’ll only be able to answer when you’ve gained some experience working with
Docker.
31. Will you lose your data, when a docker container exists?
No, you won’t lose any data when Docker container exits. Any data that your application writes to
the container gets preserved on the disk until you explicitly delete the container. The file system
for the container persists even after the container halts.
Simplifying configuration: Docker lets you put your environment and configuration into code
and deploy it.
Code Pipeline Management: There are different systems used for development and production.
As the code travels from development to testing to production, it goes through a difference in the
environment. Docker helps in maintaining the code pipeline consistency.
Developer Productivity: Using Docker for development gives us two things – We’re closer to
production and development environment is built faster.
Application Isolation: As containers are applications wrapped together with all dependencies,
your apps are isolated. They can work by themselves on any hardware that supports Docker.
Debugging Capabilities: Docker supports various debugging tools that are not specific to
containers but work well with containers.
Multi-tenancy: Docker lets you have multi-tenant applications avoiding redundancy in your
codes and deployments.
Rapid Deployment: Docker eliminates the need to boost an entire OS from scratch, reducing the
deployment time.
Docker containers are very easy to deploy in any cloud platform. It can get more applications
running on the same hardware when compared to 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. You can even share containers with your applications.
If you have some more points to add you can do that but make sure the above explanation is there
in your answer.
34. Can I use JSON instead of YAML for my compose file in Docker?
You can use JSON instead of YAML for your compose file, to use JSON file with compose, specify
the JSON filename to use, for eg:
$ docker-compose -f docker-compose.json up
36. How far do Docker containers scale? Are there any requirements for the same?
Large web deployments like Google and Twitter and platform providers such as Heroku and
dotCloud, all run on container technology. Containers can be scaled to hundreds of thousands or
even millions of them running in parallel. Talking about requirements, containers require the
memory and the OS at all the times and a way to use this memory efficiently when scaled.
This is a very straightforward question but can get tricky. Do some company research before going
for the interview and find out how the company is using Docker. Make sure you mention the
platform company is using in this answer.
Fedora 19/20+
RHEL 6.5+
CentOS 6+
Gentoo
ArchLinux
openSUSE 12.3+
CRUX 3.0+
It can also be used in production with Cloud platforms with the following services:
Amazon EC2
Amazon ECS
Rackspace
There are six possible states a container can be at any given point – Created, Running, Paused,
Restarting, Exited, Dead.
Use the following command to check for docker state at any given point:
$ docker ps
The above command lists down only running containers by default. To look for all containers, use
the following command:
$ docker ps -a
The answer is no. You cannot remove a paused container. The container has to be in the stopped
state before it can be removed.
No, it’s not possible for a container to restart by itself. By default the flag -restart is set to false.
41. Is it better to directly remove the container using the rm command or stop the container
followed by remove container?
Its always better to stop the container and then remove it using the remove command.
$ docker rm -f <container_id>
Stopping the container and then removing it will allow sending SIG_HUP signal to recipients. This
will ensure that all the containers have enough time to clean up their tasks. This method is
considered a good practice, avoiding unwanted errors.
Docker containers are gaining popularity but at the same time, Cloud services are giving a good
fight. In my personal opinion, Docker will never be replaced by Cloud. Using cloud services with
containerization will definitely hype the game. Organizations need to take their requirements an
The concept behind stateful applications is that they store their data onto the local file system.
You need to decide to move the application to another machine, retrieving data becomes painful. I
honestly would not prefer running stateful applications on Docker.
45. Suppose you have an application that has many dependant services. Will docker compose wait
for the current container to be ready to move to the running of the next service?
The answer is yes. Docker compose always runs in the dependency order. These dependencies are
specifications like depends_on, links, volumes_from, etc.
Docker provides functionalities like docker stats and docker events to monitor docker in
production. Docker stats provides CPU and memory usage of the container. Docker events provide
information about the activities taking place in the docker daemon.
Yes, using docker compose in production is the best practical application of docker compose.
When you define applications with compose, you can use this compose definition in various
production stages like CI, staging, testing, etc.
48. What changes are expected in your docker compose file while moving it to production?
These are the following changes you need make to your compose file before migrating your
application to the production environment:
Be very honest in such questions. If you have used Kubernetes, talk about your experience with
Kubernetes and Docker Swarm. Point out the key areas where you thought docker swarm was
more efficient and vice versa. Have a look at this blog for understanding differences between
Docker and Kubernetes.
You Docker interview questions are not just limited to the workarounds of docker but also other
similar tools. Hence be prepared with tools/technologies that give Docker competition. One such
example is Kubernetes.
50. Are you aware of load balancing across containers and hosts? How does it work?