Docker course: Hello World
Finally we get to the point where we actually start to use Docker.
On Linux and macOS open the Terminal, on Windows open the Command Prompt (click on the Windows button on your keyboard, type in "cmd" and press ENTER). I'd also recommend you enlarge this window so you will see more content.
Type in the following command:
docker run hello-world
At this point Docker will try to start a container using the latest version of the image called hello-world. If this is the first time you try to do this, you won't have this images on your computer so you will see a warning:
Unable to find image 'hello-world:latest' locally
Then Docker will automatically try to download the image from the Docker HUB and will let you know about this:
latest: Pulling from library/hello-world
It shows you some progress and that it managed to download it:
2db29710123e: Pull complete Digest: sha256:c77be1d3a47d0caf71a82dd893ee61ce01f32fc758031a6ec4cf1389248bb833 Status: Downloaded newer image for hello-world:latest
Then it will start a Docker container based on the hello-world:latest image.
This will print some text on the screen starting with
Hello from Docker!
The full output will look similar to this:
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:c77be1d3a47d0caf71a82dd893ee61ce01f32fc758031a6ec4cf1389248bb833 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
Once the text is printed to the screen the container will stop running.
This is not a very sophisticated image, it can only print this text and has no further functionality.
After Hello World - check the status
Before going on and trying to do more complex things with other images, let's look around to see what happened on the hard-disk of our computer.
docker ps -as
This will show you a report with a number of columns. The -a tells it to show all the containers and the -s told it to include the SIZE column.
This list all the containers that have ran and are still around on your disk.
IF this is a clean computer where you only ran the above command then this is more or less what you will see.
In the first column you will see the CONTAINER ID. This will be different as it is the ID of the container which is the runtime version of the image. It changes from run to run.
The 2nd column is the name of the IMAGE which is hello-world as that's what we used.
COMMAND is the command that was executed inside the container. This was the default command baked in the image.
CREATED is the time when the container was created.
STATUS is, well the status of the container. Currently it reports that this container has stopped running.
PORTS is not interesting now.
NAME holds the name of the container. If the user does not provide a name, and we did not provide a name, than docker will pick a random name created from two random words.
SIZE is how much space the container takes up on the disk.
docker ps -as
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE 20dc20bcac8f hello-world "/hello" 31 minutes ago Exited (0) 31 minutes ago jovial_bouman 0B (virtual 13.3kB)
If I ran docker ps without the extra parameters then it would only show the titles as the command without the -a (all) flag only shows the currently running containers and ours has already finished running.
docker ps -a
shows all the containers that are running and all the containers that have stopped but have not been deleted yet.
If you type in
you will see the list of images on your computer.
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 14 months ago 13.3kB
Here you can see the images that were downloaded or that were created locally.
You remember as we ran the docker run ... command docker told us that it cannot find the images locally and so it downloaded the image called hello-world with the latest tag.
In the first column you can see the name of the image. The second column is the tag. In this case it is latest.
The IMAGE ID is a short version of the unique ID of the image.
CREATED shows when was the image created. In our case this is an image that was created 14 month ago.
SIZE is the size of the whole image.
As you can see this is a really, really small image. Basically just the text we saw.
We can see that there are images and containers which are the runtime copies of the images.
Run Hello World again
docker run hello-world
This time it does not say that it can't find the image, and it does not need to download the image as we already have it locally. It only prints the text starting with Hello from Docker!.
Now we take a look at the status of the containers:
docker ps -as
The result will look something like this:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE f4b4ef0de525 hello-world "/hello" 7 seconds ago Exited (0) 6 seconds ago focused_margulis 0B (virtual 13.3kB) 20dc20bcac8f hello-world "/hello" 8 minutes ago Exited (0) 8 minutes ago jovial_bouman 0B (virtual 13.3kB)
Now we have two lines. The second line is the same as we had earlier, except of the CREATED and STATUS columns that shows relative time and that has changed.
As you can see the CONTAINER ID is different in the two rows and the NAMES are different, but the IMAGE and the COMMAND are the same.
If we list the images using docker images we can see that the list of images has not changed. We still has that single image on our computer.
The last thing we would like to see now is how to get rid of these containers that were created and saved on the disk.
We can use the CONTAINER ID to remote a container.
docker rm 20dc20bcac8f
If we run again
docker ps -as
Then you can see that only one line remained:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE f4b4ef0de525 hello-world "/hello" 27 seconds ago Exited (0) 26 seconds ago focused_margulis 0B (virtual 13.3kB)
We can also remove the other container in the same way after which there are no more containers left on the system as you can verify by running docker ps -as again.
Remove a Docker image
The image is still there as you can see by running docker images.
In order to remove that we can use the rmi command:
docker rmi hello-world
Untagged: hello-world:latest Untagged: hello-world@sha256:c77be1d3a47d0caf71a82dd893ee61ce01f32fc758031a6ec4cf1389248bb833 Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412 Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
If we run again docker images then we can see it is gone.
Next we are going to see a slightly more complex example using the busybox, but before you go there I'd recommend you try the commands you just saw.
Published on 2022-11-10