DEV Community

Cover image for Docker: Explained to a 5 year old. πŸ‘ΆπŸ»
Dhravya
Dhravya

Posted on • Updated on

Docker: Explained to a 5 year old. πŸ‘ΆπŸ»

When I was starting out with docker, everything was really difficult for me to figure out. But don't worry. I'm here πŸ˜‰

Docker is an AMAZING tool that you just can't miss. It's EVERYWHERE!
Docker everywhere

So here's everything you need to know about docker, in ONE blog. Don't worry - I'll keep it very short and concise ⚑
I'll walk you through the concepts - Containers, Images, etc. And then we'll write our own Dockerfile to containerize a very simple python application!

Table of Contents

What is docker?

Docker is a way to containerize applications (putting code in boxes that can work on their own). It magically makes a virtual computer, but guess what - they aren't really virtual computers.

Containers are boxes that have no host Operating system, so they are independent of the device they run on.

Think of it like this - there's a bee that only likes to live in it's own honeycomb, and will not be able to work if it lives somewhere else. You just trap the bee in a box that looks and feels exactly like it's honeycomb. That's containerization.

Containers are made using Images

works on my machine

Docker Images

Docker Images are like templates - a craftbook that has everything to make the craft. Or, in other words, it contains a set of instructions for creating a container.

But how do you make these images (to later make containers) ?

This is done using Dockerfiles.

All about Dockerfiles

A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image.
Ok, let's make a Dockerfile together.

Now, we'll start with docker HANDS ON!

Quickly download docker on your device : https://www.docker.com/get-started

Now that you have it, let's write a simple flask application and containerize it!

Here's a very simple and minimal flask app
Image description

Now, even though this might be very basic, it actually needs a lot of things to run:

  • Python 3.9
  • Flask (running pip install flask)
  • exposure to port 5000

Some programs might only run on specific Operating systems - like Windows-only or Linux-only stuff.

All these problems are solved by writing a simple dockerfile, that sets up a docker image for us.
So you need to make a file called Dockerfile (exactly, without any file extension)

Here is a walkthrough:

  • use FROM to use python base image
  • use COPY to copy the app.py file into the container
  • use RUN to pip install flask
  • use CMD to run "python app.py" when container starts

Its as easy as that!!!
Dockerfile

minor correction : the file should be named Dockerfile instead

Building the image and running container

Now, build to docker image using the docker build command and then run the image by using the docker run . command.

You can also use the --tag to give a name to the image and make it easier for yourself to run later

docker build --tag flask .
docker run --name flask -p 5000:5000 flask
Enter fullscreen mode Exit fullscreen mode

Here, --name is the name of the container to be run (which i'm naming flask), -p sets the port of the docker CONTAINER to your machine, so you can see your app on localhost. Finally, the flask at the name is the name of the image to be run.

More commands

That's pretty much it!!!
use the "docker ps" command to get a list of running containers,
"docker ps -a" to get list of ALL containers
"docker images" to get list of images

"docker --help" to get list of all commands

Mess around with the commands, they are self-explanatory

Read the official documentation here.

If you learnt something in this blog, make sure to πŸ’– it, and follow me if you REALLY liked it!

Latest comments (60)

Collapse
 
spnow profile image
Shashank Pratapwar

My 6 year old son is now playing docker docker instead of doctor doctor. Thanks to you.

Collapse
 
codewithrabeeh profile image
Rabeeh Ebrahim

You explained nicely ☺️

Collapse
 
mgonzalo profile image
Gonzalo MuΓ±oz

Dude!! I got to confess: today I won a battle against prejudice.
When I saw "16yr old" on yet another dev blog, I was about to nope outta here (I've had bad experiences before)
But something made me stay. I couldn't put my finger on it at first, but it turns out that you really have a knack for explaining things (not the same as writing about something). I loved the clean and concise style and even some figures like the one with the bee.
I'm almost twice your age, but today I learned from you.
Keep up the good work, and never stop growing!

Collapse
 
thegreytangent profile image
Jason V. Castellano • Edited

This is the most precise basic explanation about docker.

Collapse
 
dhravya profile image
Dhravya

Thanks a lot! Glad you liked it

Collapse
 
tqbit profile image
tq-bit

But it works on my machine

Then we'll ship your machine

Got me good. Noted.

Collapse
 
thyezoliveira profile image
Thyez de Oliveira

Thank you.

Collapse
 
adesoji1 profile image
Adesoji1

Thanks, simple explanation

Collapse
 
sixman9 profile image
Richard Joseph

You've made me sad, and I haven't read this yet (I will). Why? Because, for some unknown reason, I was thinking of writing something like this, on Docker, only last week, I was going to call mine "Explain Docker to me like I'm 5 years old", this is not a joke, I will get over it 😭

Collapse
 
msp99000 profile image
Manpreet Singh

Great beginner friendly tutorial man
Good work

Collapse
 
iamfutureflash profile image
PUNEET VAISHNAV

Good explanation

Collapse
 
just_moh_it profile image
Mohit Yadav

Awesome explanation, and congrats for this article's hotness 😁 Well deserved πŸ˜ƒ

Collapse
 
dhravya profile image
Dhravya

Thank you very much!

Collapse
 
laidah profile image
laidah

Thank you so much for the lovely and simple explanation! It helped me to conquer my fear of using docker.

Collapse
 
gemathus profile image
Gerardo Mathus

Great post πŸ‘πŸ‘πŸ‘! Cheers

Collapse
 
photostockedit1 profile image
Photostockeditor

Thanks!!!

Collapse
 
tbhaxor profile image
Gurkirat Singh • Edited

Nice post. I have increased its visibility already. Shameless promotion just in case anyone want to learn how to create base images using docker scratch or directly from Linux filesystem.

tbhaxor.com/create-docker-base-image/