Introduction π
- Docker has rapidly become the de facto standard for containerizing applications. As a developer or DevOps Engineer/SysAdmin, getting familiar with Docker is crucial for deploying modern, portable applications efficiently.
- While Docker boasts numerous advanced features and commands, there are certain essential ones you'll find yourself using consistently on a daily basis.
- In this post, we will go through the top 20+ essential Docker commands and their use cases everyone should know.
Installation π¨
- To install Docker on your machine, follow this document (Supported various platforms)
- To get hands-on experience and understand Docker better, you could visit this repository
Table of Contents π
Docker General Commands
1. docker info
-
docker info
displays system-wide information
- Syntax:
docker info
2. docker --help
-
docker --help
gets help with Docker. Can also use --help on all subcommands
- Syntax:
docker <subcommands> --help
Docker Registry
3. docker login
-
docker login
is used to log in to a Docker registry. If no server is specified, the default is defined by the daemon.
- Syntax:
docker login <options> <registry>
- Use cases:
ID |
Command |
Description |
1 |
docker login |
Log in to the default Docker registry |
2 |
docker login myRegistry -u username |
Log in to a specified registry with the specified username |
4. docker logout
- To log out from a Docker registry, use
docker logout
. This command is used when you want to remove the credentials used to authenticate with a registry.
- Syntax:
docker logout <registry_url>
- Use cases:
ID |
Command |
Description |
1 |
docker logout |
Log out from the default Docker registry |
2 |
docker logout myRegistry |
Logout from a specified registry |
Docker Images
5. docker build
-
docker build
is used to build custom Docker images from a Dockerfile.
- Syntax:
docker build -t <your_image_name> <options> <dockerfile_path>
- Use cases:
ID |
Command |
Description |
1 |
docker build -t myImage . |
Build an image using a Dockerfile in the current directory |
2 |
docker build -t myImage:v0.1.0 . |
Build a Docker image from a Dockerfile with specified tag |
3 |
docker build -t myImage -f demo/Dockerfile |
Build an image using a Dockerfile in the demo directory |
6. docker tag
-
docker tag
allows you to create a new tag for an existing Docker image.
- Syntax:
docker tag <source_image> <target_image>
- Use cases:
ID |
Command |
Description |
1 |
docker tag myImage:latest myImage:v2 |
Create a new tag "v2" for the Docker image "myImage" with tag "latest" |
2 |
docker tag myImage:latest myRegistry/myImage |
Tag the Docker image "myImage" with tag "latest" to a registry image tag latest |
3 |
docker tag myImage:latest myRegistry/myImage:1.0.0 |
Tag the Docker image "myImage" with tag "latest" to a registry image tag 1.0.0 |
7. docker images
- The
docker images
command lists all Docker images pulled and built on your system. You'll use this frequently to view images before running containers or cleaning up.
- Syntax:
docker images <options>
- Use cases:
ID |
Command |
Description |
1 |
docker images |
List all Docker images on the system |
2 |
docker images -a |
List all Docker images, including intermediate ones |
8. docker pull
- To download an image from a registry like Docker Hub, use
docker pull
. For example, docker pull nginx
fetches the latest nginx image.
- Syntax:
docker pull <image_name>
- Use cases:
ID |
Command |
Description |
1 |
docker pull nginx |
Pull the latest nginx image from Docker Hub |
2 |
docker pull nginx:latest |
Pull the latest nginx image from Docker Hub explicitly |
3 |
docker pull myRegistry/myImage:tag |
Pull a specific image from a private registry |
9. docker push
-
docker push
is used to upload Docker images to a registry.
- Syntax:
docker push <image_name>
- Use cases:
ID |
Command |
Description |
1 |
docker push myImage |
Push the "myImage" image to the default registry |
2 |
docker push myRegistry/myImage:tag |
Push a specific tagged version of the "myImage" image to a private registry |
10. docker save
- To save a Docker image to a .tar file, use
docker save
. This command allows you to export an image from your local Docker environment into a portable format.
- Syntax:
docker save -o <output_file> <image_name>
- Use cases:
ID |
Command |
Description |
1 |
docker save -o myImage.tar myImage |
Save a Docker image to a local .tar file |
2 |
docker save -o /path/to/output.tar myImage |
Save an image to a specific location on your system |
11. docker load
- To load an image from a saved archive, use
docker load
. This command is handy when you have an image saved as a .tar file and want to import it into your local Docker environment.
- Syntax:
docker load -i <path_to_image_archive>
- Use cases:
ID |
Command |
Description |
1 |
docker load -i myImage.tar |
Load a Docker image from a local .tar file |
2 |
docker load -i /path/to/image_archive.tar |
Load an image from a specific location on your system |
12. docker rmi
-
docker rmi
removes one or more Docker images. Make sure there are no stopped containers based on an image before removing it.
- Syntax:
docker rmi <image_name>
- Use cases:
ID |
Command |
Description |
1 |
docker rmi myImage |
Remove the Docker image named "myImage" |
2 |
docker rmi myImage:tag |
Remove a specific tagged version of the "myImage" image |
Docker Container
13. docker run
-
docker run
creates and starts a new container from an image. You can pass various options to configure the container's networking, set environment variables, map volumes, and more.
- Syntax:
docker run <options> <image>
- Use cases:
ID |
Command |
Description |
1 |
docker run -d --name mycontainer nginx |
Run nginx image in detached mode with container name "mycontainer" |
2 |
docker run -p 8080:80 --name mycontainer nginx |
Run nginx image with port mapping from host 8080 to container 80 |
3 |
docker run -e MYSQL_ROOT_PASSWORD=password -v /mydata:/var/lib/mysql mysql |
Run MySQL image with setting root password |
4 |
docker run -v /mydata:/var/lib/mysql mysql |
Run MySQL image and mounting a host directory to container |
5 |
docker run --network=host myImage |
Run a container using the host network |
6 |
docker run --privileged myImage |
Run a container with extended privileges using the Docker image "myImage" |
7 |
docker run -it myImage /bin/bash |
Run an image and open a bash shell inside a container |
14. docker ps
- Once you have containers running, you'll need
docker ps
to list them. The basic docker ps
shows just running containers. Use docker ps -a
to include stopped containers as well.
- Syntax:
docker ps <options>
- Use cases:
ID |
Command |
Description |
1 |
docker ps |
List running containers |
2 |
docker ps -a |
List all containers, including stopped ones |
15. docker stop/start/restart
- These commands allow you to stop, start, or restart one or more running containers. You reference containers by name or ID.
- Syntax:
docker stop/start/restart <container_name>
- Use cases:
ID |
Command |
Description |
1 |
docker stop mycontainer |
Stop a running container named "mycontainer" |
2 |
docker restart mycontainer |
Restart a container named "mycontainer" |
3 |
docker start mycontainer |
Start a stopped container named "mycontainer" |
16. docker rm
- Once you've stopped a container,
docker rm
removes it entirely from your system. Use docker rm -f
to force-remove running containers.
- Syntax:
docker rm <options> <container>
- Use cases:
ID |
Command |
Description |
1 |
docker rm mycontainer |
Remove a stopped container named "mycontainer" |
2 |
docker rm -f mycontainer |
Force-remove a running container named "mycontainer" |
17. docker logs
- When a containerized application is not behaving correctly,
docker logs
retrieves the logs from a specified container to help troubleshoot.
- Syntax:
docker logs <options> <container>
- Use cases:
ID |
Command |
Description |
1 |
docker logs mycontainer |
Retrieve logs from a container named "mycontainer" |
2 |
docker logs --tail 100 mycontainer |
Retrieve last 100 lines of logs from "mycontainer" |
18. docker exec
-
docker exec
allows you to run a new command inside an already-running container. For example, starting a Bash shell with docker exec -it <container> /bin/bash
.
- Syntax:
docker exec <options> <container> <command>
- Use cases:
ID |
Command |
Description |
1 |
docker exec -it mycontainer /bin/bash |
Start an interactive Bash shell in "mycontainer" |
2 |
docker exec mycontainer ls -l /app |
List files in directory "/app" in "mycontainer" |
19. docker cp
-
docker cp
allows you to copy files and directories between a container and the local filesystem.
- Syntax:
docker cp <container_id_or_name>:<source_path> <destination_path>
- Use cases:
ID |
Command |
Description |
1 |
docker cp mycontainer:/app/logs/log.txt ./local_dir/ |
Copy the file "log.txt" from the container "mycontainer" to a local directory |
2 |
docker cp ./local_file.txt mycontainer:/app/data/ |
Copy the file "local_file.txt" from the local filesystem to the container "mycontainer" |
Docker cleanup
20. docker system prune
-
docker system prune
allows you to clean up unused data in your Docker environment.
- Syntax:
docker system prune <options>
- Use cases:
ID |
Command |
Description |
1 |
docker system prune |
Remove all stopped containers, dangling images, and unused networks |
2 |
docker system prune -a |
Remove all stopped containers, all unused images, and all unused networks |
What's next?
Which Docker command do you find yourself using the most? Let us know in the comments below. Your feedback and suggestions are highly appreciated. Thank you, and happy coding! π
Top comments (8)
Using the
--privileged
is, should be, used only in rare cases, in fact never. That flag is dangerous and give the container root access to your host machine, to all folders and ressources.Yes @cavo789, thanks for bringing this point to the discussion. I agree that we should use the
--privileged
only in rare cases. And need to check the docker security best practices when doing so.Awesome list, thanks for sharing!
Thanks
γγγγ¨γγγγγΎγγοΌ
β€οΈ γε½Ήγ«η«γ¦γ¦γγγγγ§γ!
Excellent. Just missed the command to open a bash shell inside a container (run or exec version)
Thanks @pauloneves for your feedback! Yes, I've updated the command examples to include running bash shell inside a container for
docker run
, for thedocker exec
I've included it before. Yeah, this is one of our most use command right when we're trying to debug something in our container π