Basics of Docker

Ajay Yadav
4 min readAug 22, 2021

--

A prerequisite for container deployment is that it should be packaged as a container image.

Container

Container is a light weight deployment mechanism based on the OS virtualization.

Docker Engine

Docker engine is a platform to run container across various platforms.

Docker engine can be installed as Linux and Windows container engine.

Docker Engine Installation

Docker engine for various platform can be downloaded from Docker website: Install Docker Engine | Docker Documentation

Verify docker installation

Docker installation can be verified with running a bare minimum container: Hello world container

docker run hello-world

Output:

  • Logs show image doesn’t exists in the local docker repository and hence docker service downloaded the image from the docker hub repository to run the container.

Run docker container with startup command

We will run busybox image and override the startup command of the docker container.

Busybox image: Busybox is a container image that provides basic Linux commands.

docker run busybox echo "Running busybox container"

Output:

Docker Execution Flow

Let’s try to understand what actually happened in the above scenario.

There are following major components involved when running the docker container:

  • Docker client
  • Docker service
  • Docker registry ( local repository and remote repository: docker hub)
  • Container image
  • Container

Execution flow ( let’s take example of busy box )

  • Docker client exposes docker service APIs with commands.
  • When we executed the docker run command on the Docker client, it invokes the docker service API for running the container.
  • Docker service can be on the same machine as the docker client or can be on the remote machine.
  • Docker service will check if the docker busy box image already exists in the local repository. You can consider a local repository as a cache.
  • If the local docker repository doesn’t contain the busybox image then the docker service will download the image from the docker hub.
  • Docker service will create a container out of the busy box image.
  • As soon as the container is ready, the container will run a start-up command.

Run any docker image

docker run <docker_image_name>

Docker tags

When you specify an image name without a tag, the docker engine by default considers the tag as default.

In case you want to explicitly specify a tag

docker run <image_name>:<tag>

Hands-on

Let’s try a hands on exercise by containerizing a node application.

Create a node app

Docker Process

Package app into image

To build and package your app into a docker container image, you need a docker file.

Go to the sampleApp directory and create a file with name Dockerfile

FROM node: 10
ADD node-js-example.js /app.js
ENTRYPOINT ["node", "app.js"]

Anatomy of file

  • FROM defines the base image.
  • ADD will add file node-js-example.js to container image with name app.js
  • ENTRYPOINT specifies the command that will be executed when container starts up.

Build image

docker build -t mynodeapp .

As you specify the current directory ( directory `.`) as the working directory. Docker engine will look for the docker file in the current directory and build the container as per the instructions being mentioned in the docker file.

Build Process

  • Docker client uploads complete build directory to the docker service.
  • Docker service build image by executing the instructions mentioned in the docker file.
  • It stores the generated image in the local docker repository.

Docker images are layered architecture. We will cover this in details in the subsequent articles.

List Images

List images which are stored in local docker repository

docker images

Your image will be listed here once you build it.

Run docker container

docker run --name mynodeapp-container -p 8080:8080 -d mynodeapp
  • name : Name of the container
  • p : Map application port to the container port
  • d : Name of the container image

List containers

You can list all running containers

docker ps

In case you want stopped containers as well.

docker ps -a

Detail view of a running container

docker inspect mynodeapp-container

Look into running container

Sometimes to debug a container, you have to login inside the container.

docker exec -it mynodeapp-container bash

In -it , i stands for keeping standard input open and t stands for pseudo terminal.

Check the number of running processes inside the container

ps aux

Stop and Remove container

Stop container

docker stop mynodeapp-container

Remove cotnainer

docker rm mynodeapp-container

--

--