Getting Started With Docker : Working With Containers
- Last Updated On: March 10, 2015
- By: devopscube
To understand how docker works, you can refer this article, which will give you an introduction about docker and how it works. To install and configure docker, you can refer this article, which will guide you through the steps to install and configure docker.
In this post, we will explain how to create and manage docker containers.
Getting Started With Docker Containers
Before diving into practical demonstrations, let’s understand few concepts about docker containers.
- Containers are sandboxed environments which run multiple processes sharing the same host kernel.
- Containers are created from docker images.Images use a layered AUFS filesystem. An image can contain multiple layers. Layer 0 is called the base image.
- All the layers in an image are read-only except the topmost layer. The writable layer can be called as a container.
- You can commit the changes made to a container and make a new image out of it. All the layers will be preserved and you can make it a parent image to create containers.
- Each container has its own network configurations and unique id (64 hexadecimal digits).
- When you create a container, if the specified image is not present in the host, docker will download it from the docker hub (public image registry maintained by Docker Inc).
You might like: Docker Video Course for beginners
Image Taken from docs.docker.com
Commands for Creating and Managing Containers
Following are the important docker commands which are used for creating and managing containers.
- run
- ps
- stop
- start
- attach
- exec
- logs
- inspect
- rename
- restart
- rm
Docker run command:
“docker run” command is used to run containers. This command accepts  various argument. You can list all the supported argument by executing “docker run –help” command. Explaining all the arguments used by this command is out of scope of this article.
The following “docker run” command launches a new container from busybox image and creates an interactive session in the container.
docker run -it --name testcontainer busybox
[email protected]:~$ docker run -it --name testcontainer busybox Unable to find image 'busybox:latest' locally df7546f9f060: Pull complete ea13149945cb: Pull complete 4986bf8c1536: Pull complete 511136ea3c5a: Already exists busybox:latest: The image you are pulling has been verified. Important: image verification isa tech preview feature and should not be relied on to provide security. Status: Downloaded newer image for busybox:latest / # ls bin   etc   lib   linuxrc mnt   proc   run   sys   usr dev   home   lib64  media  opt   root   sbin   tmp   var / #
If you see the output of  the command, Docker was unable to find the image specified in the command in the host. So it pulled the image from the docker hub. “-i” flag in the command is used for starting an interactive session for the container (Keeps the STDIN open). “-t” flag attaches a pseudo tty. “–name” is used for naming the container. Here we named our container as “testcontainer”, “busybox” is the name of the image. Once the command is executed, Docker created the container and started an interactive session. The output shows the list of files in the container using “ls” command. To exit the container just type “exit” command.
Note: You cannot create a container with the same name. So whenever you try the examples, delete the previous container using “docker rm -f
docker rm -f testcontainer
When you exit out of the container, the container stops running. To keep the container running, you need to run the container in daemon mode using “-d” flag as shown in the command below.
docker run -d --name testcontainer busybox
Also, you can use the “–restart” flag in the docker run command, which restarts the container whenever it stops or fails. Command for creating container with restart flag is shown below.
docker run -it --restart="always" --name testcontainer busybox
docker ps command
This command lists all the containers in the host. Let’s have a look at few examples.
The following command lists all the containers.
docker ps -a
To list all the running container, use the following command.
docker ps
To list all the containers which got launched recently, execute the following command.
docker ps -l
docker stop command
This command stops the running container.
docker stop
[email protected]:~$ docker stop testcontainer testcontainer [email protected]:~$
docker start command
This command starts a stopped container.
docker start
[email protected]:~$ docker start testcontainer testcontainer u[email protected]:~$
docker restart command
This command restarts a running container.
docker restart
[email protected]:~$ docker start test test [email protected]:~$
docker attach command
This command is used to get an interactive session of a running container. Let’s say, you want to get a bash session or you want to modify some file and configurations in a running container, you can make use of the attach command. If you exit the container using “exit” command or ctrl + c, the container will stop running. To detach the container by leaving it running, you need to use  cntrl +p and cntrl +q commands.
docker attach
[email protected]:~$ docker attach testcontianer
/ # / # touch dmofile / # ls bin   etc   lib64  mnt   root   sys   var dev   home   linuxrc opt   run   tmp dmofile lib   media  proc   sbin   usr / # [email protected]:~$ [email protected]:~$ docker ps CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS       PORTS        NAMES 1d79900ed6a5    busybox:latest   "/bin/sh"      About an hour ago  Up 4 minutes              testcontianer    [email protected]:~$
docker exec command
This is the another way of getting into containers shell. Using the exec command, you can get the shell session of a running container. One advantage of the exec command over attach command is that, when you exit the container, it will continue in the running state unlike attach command.
docker exec -it <container name> <shell name>
[email protected]:~$ docker exec -it testcontianer sh / # ls bin   etc   lib64  mnt   root   sys   var dev   home   linuxrc opt   run   tmp dmofile lib   media  proc   sbin   usr / # exit [email protected]:~$ docker ps CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS       PORTS        NAMES 1d79900ed6a5    busybox:latest   "/bin/sh"      About an hour ago  Up 13 minutes              testcontianer    [email protected]:~$
docker logs command
This command gives you all the logs of a container.
docker logs testcontianer
docker inspect command
This command gives you all the information about a specific container. The output of this command is in JSON format.
docker inspect testcontianer
To get a specific detail of a container, like the IP address of a container, Â you can use the inspect command with few options as shown below.
docker inspect --format='{{.NetworkSettings.IPAddress}}' testcontianer
[email protected]:~$ docker inspect --format='{{.NetworkSettings.IPAddress}}' testcontianer 172.17.0.15 [email protected]:~$
docker rename command
This command is used for renaming a container. It takes the following form.
docker rename
Let’s try renaming our containers to “demo”
docker rename testcontianer demo
[email protected]:~$ docker rename testcontianer demo [email protected]:~$ docker ps CONTAINER ID    IMAGE        COMMAND       CREATED       STATUS       PORTS        NAMES 1d79900ed6a5    busybox:latest   "/bin/sh"      7 hours ago     Up 6 hours               demo         [email protected]:~$
docker rm command
Using this command, you can remove the containers from host. To do this, you need to stop the running container first and them remove it using the rm command.
docker rm
If you want to remove a running container without stopping it, you can use the “-f” force flag with the rm command as shown below.
docker rm -f
You can also use one-liners, which will stop and  remove all the containers from the host.
docker stop $(docker ps -a -q
docker rm $(docker ps -a -q)
In this post, we have covered all the important commands to manage containers. If you want the complete reference of docker commands and its usage, you can follow the official docker documentation here.
Let us know your feedback in the comments section.
devopscube
Other Interesting Blogs
Jenkins Tutorial For Beginners: Step by Step Guides
Jenkins is the widely adopted open source continuous integration tool. A lot has changed in Jenkins 2.x when compared to the older
How To Integrate and Visualize Prometheus Metrics In Grafana
Grafana is one of the best open source visualization tools. It can be easily integrated with Prometheus for visualizing all the target metrics.
Jenkins Architecture Explained – Beginners Guide
Jenkins is an easy to use opensource CI/CD tool. This blog covers the fundamental Jenkins components architecture. If you are a beginner
Comments
Very nice article !
I am definetly willing to go through Docker containers!
I will just add this link to extend AUFS http://developerblog.redhat.com/2014/09/30/overview-storage-scalability-docker/
Great article many thanks! – Just some spell checking needed before posting.