Docker Image vs Container | The Difference

  • by
docker image vs container

If you’re just starting to use Docker you’ve probably heard the terms Docker image and Docker container seemingly interchangeably. They are in fact 2 separate things. A Docker Image is an immutable (doesn’t change) snapshot of data containing binaries, libraries, code, etc. A Docker Container on the other hand is a runtime environment that runs your Docker image. To help clarify the Docker image vs container question we’ll go through a short overview (docker tutorial) of a common Docker workflow and point out some key differences along the way.

Docker Workflow: Docker image vs container

1.) Create a Dockerfile. A Dockerfile is more or less a list of instructions on how to build your Docker image. For example if we wanted to build an image that runs a containerized version of Ubuntu, installs vim (who doesn’t love vim?), and prints out “Hello” it would look like the code file below.

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y vim
CMD echo "Hello"

2.) Second, build a Docker image out of your Dockerfile instructions. Notice that I used the term Docker image rather than Docker container. When I run `docker build` it’s executing those Dockerfile instructions and creating an immutable snapshot AKA an image.

$ docker build . -f Dockerfile -t hello:latest
Sending build context to Docker daemon  4.096kB
Step 1/3 : FROM ubuntu:20.04
 ---> f643c72bc252
Step 2/3 : RUN apt-get update && apt-get install -y vim
 ---> Using cache
 ---> daa377ad05ce
Step 3/3 : CMD echo "Hello"
 ---> Using cache
 ---> 67a4f4514d62
Successfully built 67a4f4514d62
Successfully tagged hello:latest

3.) Let’s list our Docker images to make sure it’s there.

$ docker image ls
REPOSITORY                                                       TAG                 IMAGE ID            CREATED             SIZE
hello                                                            latest              67a4f4514d62        2 minutes ago       167MB

4.) Run the Docker container using the Docker image. It should politely say “Hello” to you (how kind). A good distinction to make is that if you execute `docker run` you’re ‘running’ a container, if you execute `docker build` you’re ‘building’ an image.

$ docker run hello:latest
Hello

5.) Even though our container ran and then shut down because it fulfilled it’s purpose we can list all of our containers whether they’re stopped or not with the `-a` flag on `docker container ls`.

$ docker container ls -a
CONTAINER ID        IMAGE               COMMAND                   CREATED              STATUS                          PORTS               NAMES
60d1c1f1424d        hello:latest        "/bin/sh -c 'echo \"H…"   About a minute ago   Exited (0) About a minute ago                       wizardly_volhard

Wrap Up

Thanks for reading! Hopefully this helped clarify the Docker Image vs Container differences for you. If you liked this hands on tutorial be sure to check out our articles on Docker Compose Environment Variables, our Docker Cheat Sheet, and the difference between Docker Entrypoint vs CMD.

Leave a Reply

Your email address will not be published. Required fields are marked *