Learn basic Docker container management with the help of these 8 commands. A useful guide for Docker beginners which includes sample command outputs.
In this article we will walk you through 6 basic Docker container commands which are useful in performing basic activities on Docker containers like run, list, stop, view logs, delete, etc. If you are new to the Docker concept then do check our introduction guide to know what is Docker & how-to guide to install Docker in Linux. Without further delay lets directly jump into commands.
How to run Docker container?
As you know, the Docker container is just an application process running on the host OS. For Docker container, you need a image to run from. Docker image when runs as process called a Docker container. You can have Docker image available locally or you have to download it from Docker hub. Docker hub is a centralized repository that has public and private images stored to pull from. Docker’s official hub is at hub.docker.com. So whenever you instruct the Docker engine to run a container, it looks for image locally, and if not found it pulls it from Docker hub.
Read all docker or containerization related articles here from KernelTalk’s archives.
Let’s run a Docker container for Apache web-server i.e httpd process. You need to run the command
docker container run. The old command was just
docker run but lately, Docker added sub-command section so new versions support below command –
root@kerneltalks # docker container run -d -p 80:80 httpd Unable to find image 'httpd:latest' locally latest: Pulling from library/httpd 3d77ce4481b1: Pull complete 73674f4d9403: Pull complete d266646f40bd: Pull complete ce7b0dda0c9f: Pull complete 01729050d692: Pull complete 014246127c67: Pull complete 7cd2e04cf570: Pull complete Digest: sha256:f4610c3a1a7da35072870625733fd0384515f7e912c6223d4a48c6eb749a8617 Status: Downloaded newer image for httpd:latest c46f2e9e4690f5c28ee7ad508559ceee0160ac3e2b1688a61561ce9f7d99d682
run command takes image name as a mandatory argument along with many other optional ones. Commonly used arguments are –
-d: Detach container from the current shell
-p X:Y: Bind container port Y with host’s port X
--name: Name your container. If not used, it will be assigned randomly generated name
-e: Pass environmental variables and their values while starting a container
In the above output you can see, we supply
httpd as an image name to run a container from. Since the image was not locally found, the Docker engine pulled it from Docker Hub. Now, observe it downloaded image httpd:latest where: is followed by version. That’s the naming convention of Docker container image. If you want a specific version container to run from then you can provide a version name along with image name. If not supplied, the Docker engine will always pull the latest one.
The very last line of output shown a unique container ID of your newly running httpd container.
How to list all running Docker containers?
Now, your container is running, you may want to check it or you want to list all running containers on your machine. You can list all running containers using
docker container ls command. In the old Docker version,
docker ps does this task for you.
root@kerneltalks # docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c46f2e9e4690 httpd "httpd-foreground" 11 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp cranky_cori
Listing output is presented in column-wise format. Where column-wise values are –
- Container ID: First few digits of the unique container ID
- Image: Name of the image used to run the container
- Command: Command ran by container after it ran
- Created: Time created
- Status: Current status of the container
- Ports: Port binding details with host’s ports
- Names: Name of the container (since we haven’t named our container you can see randomly generated name assigned to our container)
How to view logs of Docker container?
Since during the first step we used -d switch to detach container from the current shell once it ran its running in the background. In this case, we are clueless about what’s happening inside the container. So to view logs of the container, Docker provided
logs command. It takes a container name or ID as an argument.
root@kerneltalks # docker container logs cranky_cori AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Thu May 31 18:35:07.301158 2018] [mpm_event:notice] [pid 1:tid 139734285989760] AH00489: Apache/2.4.33 (Unix) configured -- resuming normal operations [Thu May 31 18:35:07.305153 2018] [core:notice] [pid 1:tid 139734285989760] AH00094: Command line: 'httpd -D FOREGROUND'
I used the container name in my command as an argument. You can see the Apache related log within our httpd container.
How to identify Docker container process?
The container is a process that uses host resources to run. If it’s true, then you will be able to locate the container process on the host’s process table. Let’s see how to check the container process on the host.
Docker used famous
top command as its sub-commands name to view processes spawned by the container. It takes the container name/ID as an argument. In the old Docker version, only
docker top command works. In newer versions,
docker top and
docker container top both works.
root@kerneltalks # docker container top cranky_cori UID PID PPID C STIME TTY TIME CMD root 15702 15690 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15729 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15730 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15731 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND root@kerneltalks # ps -ef |grep -i 15702 root 15702 15690 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15729 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15730 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND bin 15731 15702 0 18:35 ? 00:00:00 httpd -DFOREGROUND root 15993 15957 0 18:59 pts/0 00:00:00 grep --color=auto -i 15702
In the first output, the list of processes spawned by that container. It has all details like use, PID, PPID, start time, command, etc. All those PID you can search in your host’s process table and you can find them there. That’s what we did in the second command. So, this proves containers are indeed just processes on Host’s OS.
How to stop Docker container?
stop command! Again it takes container name /ID as an argument.
root@kerneltalks # docker container stop cranky_cori cranky_cori
How to list stopped or not running Docker containers?
Now we stopped our container if we try to list container using
ls command, we won’t be able to see it.
root@kerneltalks # docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
So, in this case, to view stopped or nonrunning container you need to use
-a switch along with
root@kerneltalks # docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c46f2e9e4690 httpd "httpd-foreground" 33 minutes ago Exited (0) 2 minutes ago cranky_cori
-a switch we can see stopped container now. The notice status of this container is mentioned ‘Exited’. Since the container is just a process its termed as ‘exited’ rather than stopped!
How to start Docker container?
Now, we will start this stopped container. There is a difference between running and starting a container. When you run a container, you are starting a command in a fresh container. When you start a container, you are starting an old stopped container which has an old state saved in it. It will start it from that state forward.
root@kerneltalks # docker container start c46f2e9e4690 c46f2e9e4690 root@kerneltalks # docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c46f2e9e4690 httpd "httpd-foreground" 35 minutes ago Up 8 seconds 0.0.0.0:80->80/tcp cranky_cori
How to remove Docker container?
To remove the container from your Docker engine use
rm command. You can not remove the running containers. You have to first stop the container and then remove it. You can remove it forcefully using
-f switch with
rm command but that’s not recommended.
root@kerneltalks # docker container rm cranky_cori cranky_cori root@kerneltalks # docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
You can see once we remove container, its not visible in
ls -a listing too.