Thursday, November 21, 2024
HomeA-Z Commands40 Important Docker Commands for Software Developers

40 Important Docker Commands for Software Developers

Docker has taken the world by storm since its inception in 2013. If you’re an experienced programmer crafting innovation using modern-day stacks, chances are you’ve worked with or at least heard of docker. Don’t worry if you’re a beginner struggling to grasp Docker.

We’ve prepared this guide for introducing docker to beginners and outlined the 40 most useful commands. Although docker is not all about commands and interfaces, mastering the basic commands will help you visualize its workings almost effortlessly.

Docker Fundamentals


Docker started as an OS-level virtualization provider six years ago, allowing developers to deploy their products inside containers. You can think of containers as mini-virtual machines.

It provides functionalities similar to Linux VMware tools but requires very low CPU resources. As a result, companies can deploy thousands of products in a single platform.

Docker achieves this low-level resource consumption by its design. It provides less isolation than standalone VMware guest machines and strips off many unwanted features not required by applications running on servers.

So, choosing one from Docker and full-fledged hypervisors like VMware depends solely on project requirements.

container concepts

Another handy feature of docker is that it provides exact environments for your products. Suppose you’re building a mobile app and want to share the project with collaborators.

Usually, they need to download the exact libraries and frameworks with the same version your app requires. It leads to various configuration issues and decreases development efforts significantly.

Resource Link: 20 Useful Docker Volume Command Examples for Modern Developers

Since docker creates an image of the product environment, all your collaborators can download and use this image regardless of their system configuration. Docker will fetch and build the environment all by itself. You’ll learn most of this via our examples.

Understanding Dockerfile


In Docker, the Dockerfile is the component that allows us to define the environment of a tool. It is a text file containing instructions written in a format that the docker runtime can understand. Creating and managing Dockerfiles is straightforward. So, we’ll leave the syntactical study of Dockerfiles for some other day.

dockerfile image

In practice, you’ll use the Dockerfile to define the packages used by your application, fetching and building them. When you share this Dockerfile with collaborators, they can easily set up the environment by using Docker to build this image.

Hopefully, this simple yet essential knowledge will be enough to help you understand the commands we discuss today.

Useful Docker Commands to Master


Docker has massively grown since its early days. Today, it offers multiple services ranging across different virtualization needs. So, there are a plethora of commands available for the docker cli. Our editors have selected the most used commands since they will help you understand the core concepts better.

Basic Docker Commands for Beginners


We discuss the fundamental commands of docker in the following section. They will help you spin up your containers and provide much-needed insight into docker.

1. Create a Container Using Images from Docker Hub


The Docker Hub is the official Docker repository for Docker images. It contains thousands of pre-built images created by open source developers and enterprises. You can easily spin up a working docker container using an image from this repo.

$ docker create -it ubuntu:xenial bash

The above command pulls the Ubuntu Xenial image from Docker Hub and creates a container using this image. The -it flag tells the docker to add the integrated terminal to this container. Additionally, the bash portion tells docker to run the bash command.

2. List Docker Containers


Once created, you’ll want to check whether the container is created successfully or not. The ps command tells docker to list out the current containers.

$ docker ps

Chances are this command will not display any running containers. It happens because you haven’t started your docker container yet. However, you can use the -a flag to tell the docker to list all containers.

$ docker ps -a

This command should display the container you created in the previous command.

list containers

3. Start Your Container


To use your containers in docker, you’ll need to start them first. The docker start command lets you do this quickly, as shown in the next example.

$ docker start CONTAINER_ID

Here, CONTAINER_ID is the id of your container. You’ll get this when you run the docker ps -a command. Copy it from there and use it for this example. It will start up your container within seconds.

4. Connecting to Your Container


Once started successfully, you’ll need to connect to this container to use it. The docker attach command is here for this purpose. The next command shows you how to connect to the container you created earlier.

$ docker attach CONTAINER_ID

This will result in a change in your prompt. And you’re now inside a Ubuntu Xenial-based container. What you do inside this container will remain inside it. You can verify the container by running cat /etc/issue.

5. Terminating the Container


You can easily terminate an active container using the docker stop command. It is one of the most helpful docker commands for beginners since it allows an easy exit from a running container. The next command shows you how this works.

$ docker stop CONTAINER_ID

You’ll need to run this from another terminal since the earlier terminal in running the container and doesn’t have docker inside it. Another easy workaround is to simply exit the container using Ctrl + D or typing exit inside the container.

6. Deleting a Container


Since containers are like small pieces of virtual machines, you can easily delete them without facing the consequences in the host machine. Use the following command to delete the container you created earlier.

$ docker rm CONTAINER_ID

It will delete the container instantly. However, all your files and configurations in this container will also be deleted. So, make sure to move them elsewhere if you need them in the near future.

7. Killing a Container


Docker also allows users to kill a running container. The difference between stopping a container and killing one is quite subtle, at least in Docker. When you use docker stop, it first terminates the processes running inside the container and then terminates the container.

$ docker kill CONTAINER_ID

However, the docker kill command kills the entire container process running in the host machine. This may lead to unwanted misconfiguration or corrupt the container processes. So, be cautious when using such docker commands for Ubuntu.

8. Detaching from Containers


Suppose you’ve started and attached yourself to a container. Now, you want to leave this container running but want to use your terminal session. Since the docker commands stop and kill terminate the container, you can’t use them for your purpose.

Ctrl+P Ctrl+Q

Holding down the above key combination inside a running container will detach you from that container. For example, I simply hold down Ctrl and press P and Q one after another.

9. Copying Contents between Containers and the File System


Often, you might want to copy the configuration files of your current product from the container and to the filesystem or even some other containers. The docker cp command allows you to do this. It acts like the Unix cp -a command and copies contents recursively.

$ docker cp CONTAINER_ID:/test_file test_file

This command will copy the test_file from the container with CONTAINER_ID to the host machine. The next one shows us how to copy a document from the host to a container.

$ docker cp test_file CONTAINER_ID:/test_file

10. Running Commands inside Containers


Although you can run commands directly from a running container, you might not want to attach containers all the time, especially if you’ve hundreds of containers. Since this is a common scenario, the docker runtime provides a robust command to execute container-specific commands from the admin’s terminal instance.

$ docker exec CONTAINER_ID command

This will allow you to run the command inside the CONTAINER_ID container.

11. List all Docker Images


Docker images are the building blocks of containers. As you should remember, containers are created using an image as their base. It’s normal for developers to have multiple docker images across their systems. The next command shows us how to list all the images on your machine.

$ docker images

Simply calling this command will display all top-level docker images alongside their size, tags, and repository. The -q option can be used for only fetching the IMAGE_ID.

12. Removing Docker Images


Sometimes, you may want to remove one or more docker images that are not required anymore. The next command shows how to do this.

$ docker rmi <IMAGE_ID>

However, if the image is tagged by multiple repos, you’ll need to delete it using the following manner.

$ docker rmi REPOSITORY:TAG

You can find this information when you run the command docker images.

Productive Docker Commands for Intermediate Devs


If you’ve already grasped the concept of docker and containers, you might want to look at some advanced features. We discuss various useful docker commands intended to increase developers’ productivity in the following section.

13. Adding Persistent Volumes for Containers


So when we delete a container, all data associated with it are lost. Docker allows developers to create “volumes” that provide persistent storage for these data. Volumes are simply a mechanism that binds your container to a pre-defined space on your filesystem.

$ docker create -it -v $(pwd):/var/www ubuntu:xenial bash

Running the above command will bind your current working directory to the /var/www location of your container. Now, you can modify files in your present directory, and the changes will be reflected inside the docker.

14. Creating and Running Containers using Docker Run


So far, we’ve first created our docker containers and then started it. However, docker allows us to do both of these using just a single command. Check out the below example to see how this works.

$ docker run -it -d ubuntu:xenial bash

Resource Link: How to Install and Use Docker in Your Linux System

When you run this command, it’ll fetch the Xenial image, create the container, and start it with bash. However, you won’t see the effect directly in your terminal.

This is because we’ve instructed the docker to run this container in the background using the -d flag. Eliminating this will take you to the container as soon as it’s created.

docker commands for creating containers

15. Creating a Named Container


The –name option can be used to create containers that bear specific names. You can use them as a replacement for CONTAINER_ID for most docker commands. The next command shows this in action.

$ docker create --name TEST nginx

This command will pull the Nginx image from Docker Hub and create the container called TEST in this case. You can now start it and attach your session to use the container. It works the same with the docker run command.

16. Exposing Ports for Containers


You can communicate with your containers directly from the host without using the docker runtime at all. This works by using some sort of networking scheme defined by the admin. Exposing some ports for the container is one such wide technique.

$ docker run --name NEW nginx -p 8080:80

The above command creates a container named NEW and binds its port 80 to the port 8080 of the host system. So, you’ll now be able to send requests/responses to your container using this port.

17. Look for Changes in a Container


Often, the slightest misconfiguration may lead to unwanted problems and take hours to debug. The docker diff command comes in handy in many such cases. You can use it to inspect any change in the filesystem of your container.

$ docker diff CONTAINER_ID

So, if you know for sure that a certain container is entirely healthy, you can use this command once in a while to view the changes in this container’s filesystem.

18. Creating a New Image from Modified Containers


Docker allows developers to create an entirely new image based on the changes of an already existing container. This will come in handy when you want to create multiple containers for different phases of your application.

$ docker commit CONTAINER_ID REPOSITORY:TAG

The above command will create a new image using the CONTAINER_ID container.

19. Monitoring Server for Docker Containers


The docker events command allows developers to monitor servers for real-time information on containers, images, plugins, etc. You can try this in your system using two command-line shells.

$ docker events

Enter the above command in the first shell. Now, spawn a docker container in another shell. Run some docker commands inside that container, and you’ll get real-time notifications in the first terminal.

20. Inspect Image Histories


As discussed earlier, the images are the building blocks for docker containers. So, you can easily view image histories to detect sudden problems in a container. It’s straightforward to use this command.

$ docker history IMAGE_ID

Simply get the image id of the container using docker ps and use it as shown above. It will display how the current image is created.

image histories

21. Loading Docker Images from Tars


Another great feature of docker is the ability to load images from tar. It also allows users to load images from the standard input. The syntax of the load command is shown below.

$ docker load < IMAGE.tar.gz

You can also use the following command.

$ docker load --input IMAGE.tar

Now, list your docker images to verify the effects of these commands.

Resource Link: 50 Frequently Asked Docker Interview Questions and Answers

22. Display System-Wide Information about Docker


Viewing the system-wide information about the docker runtime will help you monitor your containers. Additionally, it provides crucial information that can be helpful to debuggers due to its revealing nature. Use the below command to display this in your host system.

$ docker info

Although seemingly simple, this command will provide a plethora of information regarding both the host machine and docker containers.

23. Renaming Docker Containers


One of the most useful docker commands for starting developers is the docker rename command. It is a simple command that merely renames the container but has great significance for beginners.

$ docker rename CONTAINER NEW_NAME

You can use either CONTAINER_ID or the Name parameter to represent your container. The NEW_NAME field is for the new container name. You can get both the name and id of a container using the docker ps -a command.

24. Restarting Docker Containers


You’ll often need to deal with containers that are either hung or have new problems. One of the many reasons for this might be extra resource consumption. Restarting containers should be the first thing you should do in such cases, as done with computers.

$ docker restart CONTAINER[S]

By default, the above command will restart your container after 10 seconds. However, you can specify this value by using the -t flag. Values must be in integer.

Docker Commands for Networking


It is essential to have hassle-free communication between your containers. Thankfully, Docker network commands will make it easy for you. We’ve discussed only the basic networking commands in the following section.

25. List all Networks


The network utility is one of the best tools of the docker cli. You can use it to list all networks available to your docker daemon in the following way.

$ docker network ls

It will print out any networks that your containers can connect.

docker commands for networking

26. Connect to Networks


You can quickly connect one or more running docker containers to a multi-host network. The next command demonstrates this.

$ docker network connect NET CONTAINER_ID

NET represents the network you want to connect to, and CONTAINER_ID represents the container. You can also use the Container name instead of it.

27. Disconnect from Networks


Disconnecting your networks from a network is also as easy as connecting them. Check out the below example to find out how this works.

$ docker network disconnect NET CONTAINER_ID

Once executed, this command will disconnect the container from the NET network. You can also add the -f flag to force disconnect it.

28. Create Networks


You can also leverage the docker network command for creating personalized networks between your containers. This is regularly used in production. The next command demonstrates how to create container networks.

$ docker network create NET

This command can take several additional options for providing enhanced functionalities, such as specifying network parameters. You can find more about them here.

29. View Detailed Information on Networks


The docker network command allows developers to monitor their network information in very detail. It makes debugging much easier and configuration almost effortless. The next command shows a simple example of this.

$ docker network inspect NET

This command will provide all kinds of information available for the network NET. You can use the -v flag to make the output more human-readable. Additionally, you may use -f to format the output based on a template.

30. Delete Networks


The docker network rm command can be used to remove one or more container networks very quickly. The below command demonstrates this for you.

$ docker network rm NET

You may also remove instead of rm for this command as they’re aliases.

31. Delete All Unused Networks


Docker allows admins to delete all unused networks. It is called pruning in docker terms. The below command will demonstrate how this works.

$ docker network prune

It is an interactive command and will ask for confirmation for each removal. You can add the -f flag to turn this off. This command is safe since it doesn’t depend on the user.

Miscellaneous Docker Commands


There are plenty of additional commands available to the docker daemon. However, we can’t simply discuss all of them in such a single guide. So, don’t be alarmed if you do not find some specific commands in our list. Here are some additional docker commands for Ubuntu-like systems.

32. Build Images from Dockerfile


The Dockerfile is the primary build configuration tool for Docker containers. You can learn how to create them here. This example demonstrates how you can build a container image from a Dockerfile.

$ docker build . -t APP:v1

This command will create the image using the Dockerfile in the current working directory. It will set APP as the repo name and v1 as the tag. You’ll need to specify the path if the Dockerfile exists in some other directory.

33. Removing all Unused Resources


Since host systems usually hold hundreds of containers, there are often dangling resources. It can be unproductive and may affect the workload of the server. You can use the following command to remove all such resources.

$ docker system prune

It will delete all unused containers, volumes, and networks. Additionally, you can add the -a flag to delete all unused containers and images from the docker runtime.

34. Removing Specific Volumes


You can easily delete specific volumes that your containers no longer need. It’s a common practice during production. The next example shows that the docker volume command can be used for this purpose.

$ docker volume rm VOLUME_NAME

It will result in the deletion of the specified volume. You can pass the -f option to skip the confirmations.

35. Searching Images in Docker Hub


The docker cli also allows developers to search for specified images in the Docker hub directly from the terminal. You can use the docker search command for this purpose.

$ docker search nginx

When executed, it will look for the official Nginx image in the official repository. You can add several filters to narrow down or specify your search.

36. Delete Containers upon Exit


You can create containers that will be deleted once your job is finished and you exit from it. It can be useful in a number of situations, such as for troubleshooting. The next command shows this in action.

$ docker run --rm --it xenial /bin/bash

This command creates and starts a Xenial-based container with bash running inside. You can do your staff here, and as soon as you terminate the container, the docker engine will delete this container automatically.

37. Get Networking Logs at Host


Having the logs of your container networks at hand is extremely useful. You can use the following command to get container logs at the host machine.

useful docker commands for logging

$ journalctl -u docker.service

You can find most of your troubleshooting solutions by inspecting the output of this command.

38. Export Container File Systems as Tars


The docker cli provides the export command that can be used to export a container’s filesystem as a tar archive. Check out the below command to understand how this works.

$ docker export giant_panda > new.tar

This command is equivalent to the next command.

$ docker export --output="new.tar" giant_panda

39. View Version Information


You can easily view the version information for your docker client and server counterparts in the below commands.

$ docker version

Using the next one, you can also get the docker daemon version alongside the build information.

$ docker -v

40. View Help Information


The Docker documentation is simply inspiring. You can get help on the overall daemon simply by using the command docker.

$ docker

To get additional data on child commands, use the following syntax.

$ docker command[S] --help
$ docker network --help

So you can easily extend the depth of the cli documentation.

Ending Thoughts


Docker commands are essential for modern system maintainers and developers. It’s hard to explain docker’s impact on modern application deployments accurately. Almost all mainstream enterprises have adapted docker.

So, high-paying job opportunities are also being available for CS grads worldwide. So, learning some of these commands will be a big investment for future engineers.

Hopefully, we were able to provide you with the knowledge you sought. Comment on your thoughts, and let us know if you have more questions about Docker.

Mehedi Hasan
Mehedi Hasan
Mehedi Hasan is a passionate enthusiast for technology. He admires all things tech and loves to help others understand the fundamentals of Linux, servers, networking, and computer security in an understandable way without overwhelming beginners. His articles are carefully crafted with this goal in mind - making complex topics more accessible.

You May Like It!

Trending Now