Introduction to The Docker Life Cycle

Maintaining a large software application is not that easy task since it may have lots of dependencies and OS related configurations. What if you can create an OS image which already contains required libraries and configurations that needs to run your application? Then that would be really easy for software deployer to deploy their application easily on a cloud without doing a tedious task of setting up an OS environment. One possible solution to overcome this problem is to use a Virtual Machine. You can install all libraries, setting up configurations and take an image. When you need to deploy the application, you can simply start the machine with that image. A VM provide complete low-level machine to run an Operating System. But it does not perform faster due to VM's operational overhead. In this case Container technology comes to rescue.

Containers vs VMs


VM is nothing more than a computer that executes a program. VM is running on top of software which called Hypervisor. Here, the physical computer is known as the Host machine and the VM that running top of Hypervisor known as Guest Machine. Containers act the same as the VM, but the difference is that Containers use host machine OS instead of hardware visualization to run as a VM. Each container has its own userspace and runs on top of host OS. This makes container much faster than VMs.

Another thing about the docker is that you can keep docker images in a central repository. This repository is known as Docker Registry. Docker Registry works the same as GIT Repository. You can commit your current container as an image and push it into the Docker Registry. You can also pull images back from the Docker Registry. Docker Hub is a one such a Docker Registry that you can keep images. Following services are also widely used as Docker Registries.

  1. Quay
  2. Google Container Registry
  3. AWS Container Registry

A container can be compared with a process in OS. A process is an instance of a computer program that is being execting. A process can have multiple thread running. Containers are also working same as a process, but the difference is that Containers are processing with their full environment. Containers can have the following states.

  • Created: A container that has been created. but not started
  • Restarting: A container that is in the process of being restarted
  • Started: A currently running container
  • Paused: A container whose processes have been paused
  • Exited: A container that ran and completed
  • Dead: A container that the daemon tried and failed to stop (usually due to a busy device or resource used by the container)


Common Commands in Docker Life Cycle

Here, below are the list of commands that used to change the docker states.

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pulls an image from a remote docker hub and saves it in your local machine. This command works the same as Git pull command.

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

This command creates a new Docker container by a specified image.


This command used to start an exited or newly created container into the running state.

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

This command creates a new container and runs the image in a newly created container. Both of the "docker create" and "docker start" command can be executed by this single command.


This command stops the running container. This will change the container status from running to excited.

docker pause CONTAINER [CONTAINER...]

This command suspends the running process in running container by issuing SIGSTOP command.

docker unpause CONTAINER [CONTAINER...]

This command gets back suspended process into the running state.

Read more about docker command with examples in my previous post.

Learn Something New Everyday,
Connect With The Best Developers!

Sign Up Now!

& 500k+ others use Hashnode actively.

Ramiro Berrelleza's photo

Great summary!

I'd be careful about equating VMs to containers. While from an end user they might look the same (a vessel where you run your code), they have some pretty fundamental differences that can affect how you run and manage your applications (e.g. containers share A LOT MORE resources with the host than VMs do, and the file systems are different). This stack overflow question has a good summary of the differences.

I'd also add docker exec to the list of commands. It's very useful when you want to run a command on a container that you already launched. I use it almost daily :).

dhanushka madushan's photo

Software Engineer @WSO2

Thank you for the suggestions and explanation. I will add it to the story.

Shukant Pal's photo

Core maintainer at PixiJS & Freelance WebGL Dev

I think the Hypervisor is being misspelled as Hyperwisor.

Shukant Pal's photo

I think it is Hypervisor and not Hyperwisor

dhanushka madushan's photo

Software Engineer @WSO2

Thanks Sukant Kumar. I changed it.