DevOps Basics: Introduction to Docker Commands and Concepts
In continuing this DevOps Basics series, it is now time to learn the basic commands to properly enable use of Docker.
Introduction and Quick Concepts
I don’t want to go very deep on the containerization’s concepts but here some important concepts to understand with Docker / Containers by the simplest way.
Let’s keep that simple and say: Container = Image (same wording)
A Docker Registry is a public or private store which contains images
An image run thanks to the Docker’s daemon
The Docker’s daemon can be installed on any OS (Windows, Mac or Linux)
You can run multiples images with the same daemon (in the same OS)
Your images could or couldn’t talk between each other;
In terms of architecture, we can simply resume something like this:
Our containers (C), run on the top of a VMs running the Docker daemon inside any OS hosted on physical hosts or a cloud provider.
Is it working?
The best way to check if your Docker environment working is, through your command line, run a simple:
docker --version
You should be able to see this :
At the moment of I’m writing this blog post ,the latest version is the 1.10.3, you can check this information on the official GitHub repo: https://github.com/docker/docker
Hello World
The classic “Hello World” is a good way to try and test your environment.
You can try with this simple command:
docker run hello-world
As you can see, the first message that we had is: Unable to find image ‘hello-world’ locally
It’s important to understand what Docker did with this command:
He checked if the image called ‘hello-world’ was already there on the local environment
If not, he checked the public repository call: Docker Hub : https://hub.docker.com/
He pulled (Download) the image locally
And finally run this image locally
Understanding the lifecycle of your containers
After our awesome “Hello-world” test, we want to check more about our process.
One of the basic command to do that is : docker ps -a
Is important to add the switch “-a” to catch all the process, even the stopped one.
You can see here, our “hello-world” image have an “Exited…” status. That mean this image is stopped with nothing running on it.
To see the difference you can check a simple : docker ps
As you can see the difference, without the “-a” switch, you will be able to see only the running containers.
Now we can try to re run a second time: docker run hello-world :
We have the same output, and if we check again our process with : docker ps -a :
We have now two different process, with a different NAMES and CONTAINER ID with the same IMAGE.
If you remembered well my first architecture diagram in the introduction, you should be able to understand that each time we do a: “docker run hello-world” we are creating a new container, in fact a new “C’ purple square in the diagram, inside our VM.
Name your containers
As you can see each time we do a docker run command, Docker is generating and assigning a random name to this one.
If we want to determine by our self this name we can add the command : --name MyContainerName after the docker run command :
The logical thing is that you cannot have two time the same name for one container, you will have a conflict:
Remove your containers
You just have to execute the following command: docker rm CANITPRO
You can also do the same command using only the first characters of the container id : docker rm a61ebec
Conclusion
We just started to discover the basics of the Docker command and play with the Hello-World container.
In the next article we will discover more about "Ports Mapping", "Volume Mapping", "Registry" and even more…