DEV Community

Cover image for Learn Docker basics quickly!
Jaya chandrika reddy
Jaya chandrika reddy

Posted on • Updated on • Originally published at jayachandrika.com

Learn Docker basics quickly!

Article originally written at https://jayachandrika.com

In this Article lets explore :

Have you ever built an application but it doesn't run on all platforms? Or been sick of installing different dependencies and libraries for each service/component in the application? Dodged the whole nine yards just to deploy, scale and manage a simple application??

Then DOCKER is waiting for you!!!

Docker:What the hell is it?

Docker is a set of platform as a service products that uses OS-level virtualization to deliver software in packages called containers.

(Well. . .thats the GOOGLE definition for you! )

To wrap it up simply,it is just a BOX!

Imagine,

  1. A printer box, we insert a paper and get printed text or colors on it.

    So how is it working ? Perhaps all the colors and required material is already present in the printer.
    Alt Text

  2. Consider a car wash, car is sent in, many process like washing, cleaning etc happen and at the end we get a shiny clean car (or a less rusty one).

Alt Text

So, docker is like a printer box or car wash setup in this instance, taking an input and giving an output basically.

It is basically a box with an application and its related dependencies, libraries etc inside it

But why docker?

Alt Text

Imagine we are building a zoo, we toss all animals like monkeys, Lion and Crocodiles in one big park with only one kind of food and only one kind of environment, lets say, land.

The bananas eaten by monkeys canโ€™t be used by Lions and crocodiles, the meat for Lions canโ€™t be eaten by monkeys. Monkeys want trees and crocodiles need a water space in the environment.

In similar way, if we are building an application that has services like a database and framework etc, The libraries and dependencies(food) used by databases (cassandra, postgresql, mongodb etc) may not be compatible/suitable for frameworks (strapi, nodejs express etc).

Eg: MongoDb version 4.26 might not be compatible/suitable for NodeJs version 4.16.4

To make it easy to develop, run and maintain an application and to operate on all the platforms we came up docker. The problem in zoo example can be solved by providing each animal, a separate boundary with the required food and environment.

Containers

Alt Text

In docker we have those separate boundaries called containers. We place each service in one container with all the libraries and dependencies required for it.

Container is a completely isolated environment with their own processes, network interfaces and their own mounts.

Wait, doesnt it look familiar? Yes,you are right if you guessed it, they remind us of Virtual machines. If its similar to VMs, Why on Earth do we need to use Containers??

Well, Each VM has a separate OS along with libraries, dependencies and application, which increases overload and utilization, making it difficult to operate it in small PCs(though we might not use it there).

Whereas Containers share the same OS, considerably less overload and utilization than VMs. Hence they are just the darlings preferred for application development, deployment and management.

Alt Text

Images

These are readymade templates of services like MongoDb, NodeJs etc, to run in containers. We can either use existing images from docker.io or create our own.

Creating an Image of the service helps in shipping it for deployments. Then it is just running a simple command to get the server up and running. We dont have to worry about creating environment, installing dependencies and what not.

Magic commands

Its time to blow some fairy pixel dust and do some magic!

Lets start with running an image in a container,using run command.

Run redis image in container

docker run redis

Alt Text

List the version details

docker version

Alt Text

List the Running containers

docker ps

Alt Text

List the Running & Not Running containers

docker ps -a

Alt Text

Remove a container

docker rm [container ID]

Alt Text

Note: To remove a container make sure it is stopped first using stop command.

List the images

docker images

Alt Text

Remove an image

docker rmi [image_name]

Alt Text

Just download the image but not run in the container

docker pull [image_name]

Alt Text

Thank you so much for reading my content. More of such content coming on this blog, so stay tuned.

Article originally written at https://jayachandrika.com

Oldest comments (49)

Collapse
 
developertharun profile image
Tharun Shiv

Amazing article! Looking forward for more! Keep going.. ๐Ÿ™Œ

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Thank you for the support ๐Ÿ˜„

Collapse
 
manishfoodtechs profile image
manish srivastava

Nice Article Ms Reddy.
1) Docker is challenged by podman on security. Google for podman. Podman and docker have same commands and you can use docker hub too.

2)dev.to/manishfoodtechs/5-minutes-c...

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Thank you manish! Read your article, its good and engaging ๐Ÿ‘Œ

Collapse
 
bovermyer profile image
Ben Overmyer

Yes, but podman is rather niche still. Someone reading a beginner's article like Jaya's is not going to be ready for podman.

Collapse
 
netops2devops profile image
Kapil

Agree with Ben. While Podman has it's benefits over Docker it's a part of RedHat ecosystem. Also given that majority of the dev's have adopted/migrated their applications to docker there's a less of a chance they're going to shift back to a completely new product like Podman.

Thread Thread
 
manishfoodtechs profile image
manish srivastava

Yes Mr Aggarwal & Mr Ben .
A new learner may go for docker. But in future he has to adopt the new technology Podman which is more promising than docker.

Podman is niche technology why to try?

Since, both ( docker and redhat are OCI member , so system admins have no reasons to worry. Also , Amazon Fargate (AWS Fargate), OpenSUSE, Openshift, centos, oracle and RHEL all in latest release have dropped Docker. More and more companies are dropping docker and so system admins.

what is the problem with Docker? Actually there are few,

-A single process could be a single point of failure.
-This process owned all the child processes (the running containers).
-If there is any failure in the docker daemon, then every child processes are lost its track.
-Building containers led to security vulnerabilities.
-All Docker operations had to be conducted by a user (or users) with the same full root authority.

I use LXC & LXD and create my own secure environments. However, I don't hesitate to learn other technologies like docker or podman. What I know, More and more companies are shifting from "running Docker" to "running containers" and adapt new tools, all of which are standard-compliant and even work nicely with one another.

Here comes the role of podman which solves most of the problem.

Thread Thread
 
developertharun profile image
Tharun Shiv

Hi sir, where can I learn more about Podman? ๐Ÿ™‚

Thread Thread
 
manishfoodtechs profile image
manish srivastava

Podman is very easy if you know how to do basics of docker you know basics of podman. Commands are similar. Just you have to remove docker in command with podman. Like docker pull will be podman pull and docker run will be podman run....
To quickly learn docker here is an article of mine:
dev.to/manishfoodtechs/5-minutes-c...

Thread Thread
 
developertharun profile image
Tharun Shiv

Thank you so much sir. It was glad receiving reply from you, will check your article out now. ๐Ÿ™‚

Thread Thread
 
bovermyer profile image
Ben Overmyer

I agree with your assessment of the problems with Docker.

I'm not saying that podman is bad. I'm saying that it has no place in a beginner tutorial for Docker.

Thread Thread
 
netops2devops profile image
Kapil

while Podman is promising and maybe devs will eventually shift to Podman or something new. But that shift isn't happening overnight or anytime soon is what I am saying.

Collapse
 
kashyapamit profile image
Amit kashyap

Nice

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Glad you found it useful ๐Ÿ˜„

Collapse
 
kashyapamit profile image
Amit kashyap

Well Iโ€™m just starting with Swift Server side, so yes you had the practical examples spot on!

Thread Thread
 
chandrika56 profile image
Jaya chandrika reddy

That's cool. Best of luck!

Collapse
 
dstri26 profile image
Trideep Barik

That's a beautiful post. Loved the way you created a relation between real life and dockerโœจ

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Very happy that it was interesting to you Mr.Trideep

Collapse
 
uma_bcc profile image
umamaheswari.v

Good one...

Collapse
 
uma_bcc profile image
umamaheswari.v

You can use the #devops tag to your post, it is very relevant to devops. ๐Ÿ™‚

Collapse
 
praveenreddy1798 profile image
praveenreddy1798

yeah

Collapse
 
developertharun profile image
Tharun Shiv

correct

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Thank you for the suggestion ๐Ÿ˜Š

Collapse
 
praveenreddy1798 profile image
praveenreddy1798

Helpful

Collapse
 
venkat121998 profile image
venkat anirudh

Docker seems interesting. good article btw

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Glad you enjoyed it Mr.Venkatโ˜บ๏ธ

Collapse
 
jacksoft profile image
Jacksoft CS • Edited

Tha was very useful. Thanks for sharing

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Glad it was helpful to you ๐Ÿ˜Š

Collapse
 
yashraj021 profile image
Yash

Greatttttttt!!!!!

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Thank you โ˜บ๏ธ

Collapse
 
davidyaonz profile image
David Yao

Actually I use docker almost everyday but without knowing some of the facts you explained. Thanks for this great article.

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Glad you find it useful ๐Ÿ‘๐Ÿ˜Š

Collapse
 
akmish profile image
akmish • Edited

One of the best articles I've read on Docker, seriously.
You explained the concept and implementation in such easy and interesting way.
Kudos!
~Akshat

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Thank you very much for the encouragement ๐Ÿ˜„

Collapse
 
manishfoodtechs profile image
Info Comment hidden by post author - thread only accessible via permalink
manish srivastava

dev.to/manishfoodtechs/time-to-say...

TIME TO SAY BYE BYE DOCKER

Collapse
 
stamper profile image
Alexander Toropov

docker stop 6f
can I identify container just by first two symbols???

Collapse
 
chandrika56 profile image
Jaya chandrika reddy • Edited

Very good question.As long as any other container doesn't start with 6f, you can use 6f. Suppose container A has id '6fedstk' and B has id '6fesyiu', you have to choose atleast 6fed to represent A, to make them distinguished

Hope it was clear. Do ask for more doubts๐Ÿ˜„

Collapse
 
stamper profile image
Alexander Toropov • Edited

it doesn't work for me :(

Thread Thread
 
chandrika56 profile image
Jaya chandrika reddy

May i know the container id names and the command you used?

Thread Thread
 
stamper profile image
Alexander Toropov

yes, sure ibb.co/pQXXgZX

Thread Thread
 
chandrika56 profile image
Jaya chandrika reddy

Try docker stop fdd

Let me know what happens

Thread Thread
 
chandrika56 profile image
Jaya chandrika reddy

Try docker stop fdd

Let me know what happens

Thread Thread
 
stamper profile image
Alexander Toropov

it seems that's my bad. I'm terribly sorry.
it doesn't work for the whole container ID as well
those containers just were not started
I thought the error message will be slightly different, like 'the container is not started yet'

Thread Thread
 
chandrika56 profile image
Jaya chandrika reddy

Glad you found the solution ๐Ÿ˜„

Collapse
 
stamper profile image
Alexander Toropov

here is the screenshot from console ibb.co/pQXXgZX

Collapse
 
developertharun profile image
Tharun Shiv

Didn't know that. Thanks for letting us know ma'am ๐Ÿ‘

Collapse
 
patricnox profile image
PatricNox

If I would need to use a script outside the container that executes a bash command inside the container using the default user, what's the best practice?

33 is macOS default user id
1000 is Linuxs

and windows can't even use .sh files

The reason behind this is cus the application environment is configurated on the named database container, meaning we cant run commands outside the container as it would imply the settings are wrong.

Collapse
 
realityexpander profile image
Chris Athanas

great breakdown, thank you!

Collapse
 
chandrika56 profile image
Jaya chandrika reddy

Thank you for the support๐Ÿ˜„

Some comments have been hidden by the post's author - find out more