Open In App

Docker - Remove All Containers and Images

Last Updated : 19 Dec, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

In Docker, if we have exited a container without stopping it, we need to manually stop it as it has not stopped on exit.  Similarly, for images, we need to delete them from top to bottom as some containers or images might be dependent on the base images. We can download the base image at any time. So it is a good idea to delete unwanted or dangling images from the current machine.

Docker Cleanup

Keeping your Docker environment organized and efficient is essential for developers and operations teams. As you work with containers and images, your environment can easily get cluttered. Regular cleanup isn’t just a nice to have; it’s a must for several reasons:

  • Freeing Up Disk Space: Docker images and containers can quickly start taking up a lot of space, especially if you’re frequently building new images or testing different applications. Over time, all those unused images add up and start eating into your disk space, which can eventually slow down your system. By routinely deleting anything you no longer need, you help your system run smoothly and avoid storage issues.
  • Improving Performance: A cluttered Docker environment can slow things down. When you have a lot of images and containers piling up, simple commands can take longer to run. Regular cleanup clears away unnecessary files, speeding up Docker’s performance and making your workflows more efficient.
  • Avoiding Conflicts with Outdated Images: Holding onto old images can lead to compatibility issues and unexpected problems in your applications. If you end up with multiple versions of the same image, managing dependencies and making sure your apps are running the right version becomes much more complicated. Cleaning up helps you keep only the most current, secure versions in use.
  • Keeping Development and Production Environments Clean: Whether you’re in a development or production environment, staying organized is essential for stability and reliability. Removing outdated containers and images ensures that your team always has access to the most relevant versions, reducing the risk of errors during deployment.

It’s a good idea to clean up your Docker environment regularly especially after finishing major development phases, switching between projects, or when you notice you’re running low on disk space. Setting up a maintenance schedule for Docker cleanup can help you stay on top of things and avoid any issues before they escalate.

How to Delete Images in Docker?

To delete the image by the ImageId/Name we can use the following command. To know more about how to build a docker image with the help of Dockerfile refer to Concept of Dockerfile .

docker rmi <imageId/Name>

To force remove the docker Images by the ImageID/Name we can use the following command.

docker rmi -f <imageId/Name>

Note: We can't remove the images by force or normally while the container is running.

Dangling Images are those that don't map to either the repository or the tag. The command used is to remove the dangling images. To know more about how to tag Docker images by referring to Docker image tags .

docker image prune

We can remove all images in the docker machine to clear unwanted clutter and space in the system. We can anyways fetch the latest version or specific versioned image from the docker registry or from the cache.

docker rmi $(docker images -q)
Remove all the images.

How to Delete Containers in Docker?

Before deleting the containers we need to stop the container first for that we use the command.

docker stop <containerId/Name>

1. Docker Stop vs Docker Kill

Docker stop will first send a SIGTERM signal before killing the process with a SIGKILL signal and a grace period. When Docker kill sends SIGKILL, it immediately terminates the process.

Stop all running containers: In order to stop the containers which have not exited. This might happen when the command used in the Docker image is left running. The command should be exited and this will in turn stop the container. To stop the container when you have not exited the container by stopping the command, you need to run the following command.

docker stop $(docker ps -aq)

Delete the container: If the container is stopped then we can use the following command to delete the container.

docker rm  <containerId/Name>

Force delete the container: We can force remove the containers while they are running without stopping them by using the below command.

docker rm -f <containerId/Name>
Stop the Containers

2. Remove All Containers

To remove all containers from the docker machine, we need to get the ids of all the containers. We can simply get the ids of the containers with the command docker ps -aq , then by using the docker rm command, we can remove all the containers in the docker-machine.

docker rm $(docker ps -aq)
Remove all the containers

3. Remove All Stopped Containers

To remove all containers which are stopped/exited, we can use filters in the ps command argument. We can't directly remove a container if it is not stopped. We can stop containers that are not exited or are running by using the -f argument to the ps command in docker, the -f or --filter option takes in a filter like status=exited or status=running or name and so on. We can filter out to stop the specific containers according to the requirement.

docker rm $(docker ps -aq --filter  status="exited")

After filtering out the container which is running, we can use the stop command to stop those containers with the -q to silence the numeric ids associated with those containers.

docker stop $(docker ps --filter status=running -q)

This will stop all the containers and thus we can now remove the containers from the docker machine. We can even filter the containers which are stopped here to remove only those whose status is exited.

docker rm $(docker ps --filter status=exited -q)
delete the stopped containers.

The below command removed all the containers which are in the existing state. That means the containers stopped.

docker container prune
Docker container Prune


To know more about Docker rm command you can refer to this article What is Docker rm command?

Automating Docker Cleanup

Automating Docker cleanup can save you a lot of time and effort, making it much easier to keep your environment organized. Here are some practical strategies to help streamline the cleanup of Docker containers and images:

1. Using docker cli commands

Docker’s command line interface provides several built in commands to remove containers and images easily. You can even automate these by adding them to a script. For example:

To remove all stopped containers, use:

docker container prune -f

To remove all unused images, use:

docker image prune -a -f

By creating a simple shell script with these commands, you can run it regularly or integrate it into your CI/CD pipeline, ensuring your environment stays clean with minimal manual work.

2. Automating with Scheduled Tasks (Cron Jobs)

On Linux based systems, cron jobs are perfect for running scripts on a set schedule. Here’s how to set one up: This simple setup will automatically run your cleanup script, keeping your Docker environment tidy without you needing to remember to do it yourself.

Open the crontab editor by running:

crontab -e

Add a line to schedule your cleanup script to run daily at midnight (adjust as needed):

0 0 * * * /path/to/your/cleanup-script.sh

This simple setup will automatically run your cleanup script, keeping your Docker environment tidy without you needing to remember to do it yourself.

3. Using Third-Party Tools

There are also third-party tools that can simplify Docker cleanup:

  • Docker System Prune: This command removes all unused data, including stopped containers, unused networks, dangling images, and the build cache. Run docker system prune -a -f for a full cleanup in one command.
  • Docker Compose: If you’re using Docker Compose for multi container applications, you can run docker-compose down --rmi all to remove all containers and images for a specific service.
  • Custom Cleanup Scripts: If you want more control over your Docker cleanup, consider writing your own scripts in Python or another programming language. You can create a script that automatically deletes containers and images that haven’t been used for a specified number of days. This tailored approach allows you to manage your resources more effectively based on your specific needs.
  • Monitoring and Alerts: It’s also crucial to set up monitoring tools that notify you when your disk usage hits a certain threshold. This proactive strategy helps you catch potential storage issues early, ensuring that your Docker environment remains healthy and efficient. By staying on top of your resources, you can prevent problems before they escalate.

Best Practices for Removing Images in Docker

  • Run docker image prune Regularly: To keep your system clean, make it a habit to run docker image prune often, which removes dangling images. If you want to clear out all unused images, you can use docker image prune -a, but be careful not to delete any images you still need.
  • Stop and Remove Containers First: Before deleting images, always stop and remove any containers that are using them.
  • Use Force (-f) Cautiously: Use the -f (force) option with care when deleting images. Only force delete when you’re sure that no essential containers rely on those images.
  • Automate with Scheduled Cleanup: Set up a cron job to automate cleanup tasks like docker container prune and docker image prune -a. This keeps your Docker environment free of clutter without needing manual intervention.
  • Tag Images: Label your images with easy to understand tags, like project:1.0, so you can quickly identify and remove older versions without risking important ones.
  • Back Up Important Images: If you have key images, consider pushing them to a Docker registry or private repository. This way, you can delete them locally to save space without losing access to essential versions.

Conclusion

To keep your Docker environment running efficiently, it’s essential to maintain a clean and organized setup on a regular basis. One of the best ways to achieve this is by removing unused images and stopping inactive containers. Not only does this free up valuable disk space, but it also enhances the performance of your Docker containers and helps prevent potential conflicts or errors in your applications. Staying on top of maintenance ensures that your setup runs smoothly and helps you avoid any unexpected issues down the line. Whether you’re working in development or production, maintaining a tidy Docker environment ultimately saves you time and keeps everything operating at its best.


Next Article
Article Tags :

Similar Reads