Dockah! Dockah! Dockah!
I have been dabbling with docker for quite sometime, to be honest when it was introduced to me I didn’t understand it much but as time passed and I started experimenting with it I got to know the technology better and better. This made me understand various concepts better. I understood virtualization
, containerization
, sandboxing
and got to appreciate how docker solves the problem of works on my machine
.
When I started using docker I use to just run few commands and I could get the server running, this I could access through browser that was more than enough for me. When I use to make changes to the code I could see it getting reflected in the way I am running the application and I was a happy man.
This was all abstract thinking and I was not worried about what was going inside the container, it was a black box for me. This went on for a while but it shouldn’t have, I have the right to know things and how they work. So I started exploring about the realm and the more I read about it the more I fell in love with it. I eventually landed up on Jessie’s blog. The amount of things she and Gautham has taught me is crazy. I could never think that docker being a headless server could actually be used to captivate an application in such a way that you decide how much resources should be given to it. We at jnaapti have been working on various other possibilities but that for some other time.
So yeah there is more to just starting the application using docker and get things to work. So let’s try to understand few things with respect to docker, this is purely from my experience and how I understood things. So containers are virtual environments which share some of the resource of your host operating system. Containers are just like Airbnb
guest for which the host is the Operating System
. Containers are allowed to use the resources only when the user of Operating System
gives them permission to use. Now the way I use them is basically in two ways, Stateful containers or Stateless containers, stateful being the one which has some data generated and stored in them while stateless is the one which doesn’t have any dependency on data.
Let me show you one of the use case that I generally use containers for; Now people may disagree and say I am exploiting it or using the power for wrong purpose but to be very frank if it solves my problem why should I care XD. Now, imagine I want to learn to write Go
and I don’t want to install it on my system but have an isolated environment for it. There are two ways I can pull a docker image which has Go
in it or get a normal image and install go in it. An image here is just like an iso
file which is used to help you install an Operating System
on your machine. Let’s see what all images I have on my machine,
I would run docker images
and the output looks like this:
docker-images
This shows that I have a znc
image I use it to run a znc
bouncer. Let’s try and pull a ubuntu
image and install golang
in it. The command goes docker pull ubuntu
.
docker-pull
Now we need to run
a docker container and get a shell access to the container. For that we run command docker run -it --name="golang" ubuntu:latest /bin/bash
Let’s break it down and see what is going on here, run
tells the docker to start the container -it
option tells that this is going to be an interactive
session and we need to attach a tty
to this, --name
is the option to give name to the docker container and ubuntu:latest
is the name of the image and /bin/bash
is the process that needs to be run.
Once you run this command you will that you will get a root
prompt something like this:
docker-prompt
Now you can run any command inside it and you will be totally isolated from your host machine. For installing golang
let’s follow these instruction from Digital Ocean. You should ignore the ssh
instruction instead run apt update
and apt install curl nano.
Follow the rest normally and you will see it working like this:
go-docker
You can play around with golang
in the docker and when you are done you can exit. The docker stays it’s just that you are out of it. You want the shell again you can run,
docker exec -it golang /bin/bash
You will get the shell again, this is what is called stateful container since it will have all the files that you have created. You can go ahead and mount
a volume to the container using -v
option in the docker run
statement, this will act as if you plugged in a pen-drive in the docker storage being a directory you have created on the host machine.
docker exec -it -v /home/fhackdroid/go-data:/go-data golang /bin/bash
This will mount
the /home/fhackdroid/go-data
to /go-data
in the docker container.
These are the few ways I use docker in my daily life, if you use it in any other way and you want to share do write it to me I would be more than happy to know.
Happy Hacking Folks!
Did you find this article valuable?
Support Farhaan Bukhsh by becoming a sponsor. Any amount is appreciated!