Managing containers using Docker CLI
The next step is to actually run a container from the image we pulled from Docker Hub or a private registry in the previous chapter. We are going to use the docker run
command to run a container. Before we do that, let's check if we have any containers running already by using the docker ps
command:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAME
Run a container with the docker run
command:
$ docker run httpd
The output of the preceding command will be as shown in the following screenshot:

The container is running, but we cannot leave the terminal and continue working in the foreground. And the only way we can escape it is by sending a TERM signal (Ctrl + C) and killing it.
Docker ps and logs
Run the docker ps
command to show that there are no running containers:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Run docker ps -a
to show both running and stopped containers:
$ docker ps -a
The output of the preceding command will be as shown in the following screenshot:

There are a few things to note here. The STATUS
field says that container 5e3820a43ffc
exited about one minute ago. In order to get container log information, we can use the docker logs
command:
$ docker logs 5e3820a43ffc
The output of the preceding command will be as shown in the following screenshot:

The last message says caught SIGTERM, shutting down
. It happened after we pressed Ctrl + C. In order to run a container in background mode, we can use the -d
option with the docker run
command:
$ docker run -d httpd
5d549d4684c8e412baa5e30b20697b72593d87130d383c2273f83b5ceebc4af3
It generates a random ID, the first 12 characters of which are used for the container ID. Along with the generated ID, a random container name is also generated.
Run docker ps
to verify the container ID, name, and status:
$ docker ps
The output of the preceding command will be as shown in the following screenshot:

Executing commands inside a container
From the output, we can see that the container status is UP
. Now we can execute some commands inside the container using the docker exec
command with different options:
$ docker exec -i 00f343906df3 ls -l /
total 12
drwxr-xr-x. 2 root root 4096 Feb 15 04:18 bin
drwxr-xr-x. 2 root root 6 Nov 19 15:32 boot
drwxr-xr-x. 5 root root 360 Mar 6 21:17 dev
drwxr-xr-x. 42 root root 4096 Mar 6 21:17 etc
drwxr-xr-x. 2 root root 6 Nov 19 15:32 home
...
Output truncated for brevity
...
Option -i
(--interactive
) allows you to run a Docker without dropping inside the container. But we can easily override this behavior and enter this container by using -i
and -t
(--tty
) options (or just -it
):
$ docker exec -it 00f343906df3 /bin/bash root@00f343906df3:/usr/local/apache2#
We should fall into container bash CLI. From here, we can execute other general Linux commands. This trick is very useful for troubleshooting. To exit the container console, just type exit
or press Ctrl + D.
Starting and stopping containers
We can also stop and start running containers by running docker stop
and docker start
commands:
Enter the following command to stop the container:
$ docker stop 00f343906df3
00f343906df3
Enter the following command to start the container:
$ docker start 00f343906df3
00f343906df3
Docker port mapping
In order to actually benefit from the container, we need to make it publicly accessible from the outside. This is where we will need to use the -p
option with a few arguments while running the docker run
command:
$ docker run -d -p 8080:80 httpd
3b1150b5034329cd9e70f90ee21531b8b1ab1d4a85141fd3a362cd40db80e193
Option -p
maps container port 80
to your server port 8080
. Verify that you have a httpd
container exposed and a web server running:
$ curl localhost:8080
<html><body><h1>It works!</h1></body></html>
Inspecting the Docker container
While the container is running, we can inspect its parameters by using the docker inspect
command. The output is provided in JSON format and it gives us a very comprehensive output:
$ docker inspect 00f343906df3
[
{
"Id": "00f343906df3f26c24e02cd61d6a37bbc36106b3b0372073673c2983cb6f",
...
output truncated for brevity
...
}
]
Removing containers
In order to delete a container, you can use the docker rm
command. If the container you want to delete is running, you can stop and delete it or use the -f
option and it will do the job:
$ docker rm 3b1150b50343 Error response from daemon: You cannot remove a running container 3b1150b5034329cd9e70f90ee21531b8b1ab1d4a85141fd3a362cd40db80e193. Stop the container before attempting removal or force remove
Let's try using -f
option.
$ docker rm -f 3b1150b50343
Another trick you can use to delete all containers, both stopped and running, is the following command:
$ docker rm -f $(docker ps -qa)
830a42f2e727
00f343906df3
5e3820a43ffc
419e7ce2567e
Verify that all the containers are deleted:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES