-
Notifications
You must be signed in to change notification settings - Fork 8
Docker: Managing Images & Containers
This guide provides essential Docker commands for managing images and containers, focusing on saving, exporting, deleting, and handling dependencies. Follow the structured sections to efficiently manage your Docker resources.
If you need to back up your images and containers (e.g., to a USB drive), follow these steps.
If saving to an external drive, ensure it's mounted:
lsblk # Identify the device (e.g., /dev/sdb1)
sudo mkdir -p /mnt/usb
sudo mount /dev/sdb1 /mnt/usbList existing images:
docker imagesSave a single image:
docker save -o /mnt/usb/docker_images.tar image_name:tagSave multiple images:
docker save -o /mnt/usb/docker_images.tar image1:tag1 image2:tag2List containers:
docker ps -aIf a container has modifications, commit it as an image:
docker commit container_id new_image_name
docker save -o /mnt/usb/docker_containers.tar new_image_nameAlternatively, export the entire container:
docker export -o /mnt/usb/container_backup.tar container_idTo restore an image:
docker load -i /mnt/usb/docker_images.tarTo restore a container:
docker import /mnt/usb/container_backup.tar new_container_nameWhen managing disk space, you may need to remove images and containers.
List images:
docker imagesRemove by Image ID:
docker rmi IMAGE_IDRemove by Repository Name:
docker rmi REPOSITORY:TAGForce delete an image if it's in use:
docker rmi -f IMAGE_IDClean up all unused images:
docker image prune -aDelete all images (
docker rmi $(docker images -q)List all containers:
Stop a running container:
docker stop CONTAINER_IDRemove a stopped container:
docker rm CONTAINER_IDdocker ps -aForce remove a running container:
docker rm -f CONTAINER_IDRemove all stopped containers:
docker container pruneRemove all containers (including running ones):
docker rm -f $(docker ps -aq)Docker images inherit layers from parent images, which can cause issues when deleting or modifying them.
Check which images depend on a specific image:
docker images --filter "since=IMAGE_ID"If an image cannot be deleted due to child dependencies:
-
Find and remove child images first:
docker rmi CHILD_IMAGE_ID
-
Force delete the parent (if no active dependencies):
docker rmi -f IMAGE_ID
-
Delete dangling/unused images:
docker image prune -a
If your images have deep nesting (i.e., multiple dependent images), follow this to flatten them.
Run containers from each image:
docker run --name temp_container1 -d image1
docker run --name temp_container2 -d image2
docker run --name temp_container3 -d image3
docker run --name temp_container4 -d image4
docker run --name temp_container5 -d image5Export and import each image to remove parent dependencies:
docker export temp_container1 -o image1.tar
docker export temp_container2 -o image2.tar
docker export temp_container3 -o image3.tar
docker export temp_container4 -o image4.tar
docker export temp_container5 -o image5.tar
cat image1.tar | docker import - new_image1
cat image2.tar | docker import - new_image2
cat image3.tar | docker import - new_image3
cat image4.tar | docker import - new_image4
cat image5.tar | docker import - new_image5Now, delete the old images:
docker rmi -f image1 image2 image3 image4 image5✅ Now, each image is fully independent! 🚀
To find out if an image has a parent:
docker inspect --format '{{.Parent}}' IMAGE_IDIf it returns empty (""), the image has no parent.
docker history IMAGE_IDIf the image was exported/imported, it will have only one or two layers.
docker inspect --format='{{.RootFS.Layers}}' IMAGE_IDCompare with another image:
docker inspect --format='{{.RootFS.Layers}}' parent_image
docker inspect --format='{{.RootFS.Layers}}' child_imageIf they share layers, the child depends on the parent.
docker images --format "{{.Repository}}:{{.Tag}} {{.ID}} {{.ParentID}}" | column -tThis prints an image-to-parent relationship table.
When you export a container and import it as an image, you get an independent image.
docker export -o container_backup.tar container_id
cat container_backup.tar | docker import - new_image_name✅ All installed software inside the container.
✅ All files & modifications made inside the container.
❌ Multi-layer caching & build history
❌ ENTRYPOINT, CMD, ENV, EXPOSE settings
To restore missing metadata during import:
docker import container_backup.tar new_image:latest \
--change='CMD ["/bin/bash"]' \
--change='ENV APP_ENV=production' \
--change='EXPOSE 8080'-
Use
docker save/loadto retain history and multi-layer caching. -
Use
docker export/importto create fully independent images (but lose metadata). -
Flatten nested images with
docker export/importto remove dependencies. -
Use
docker inspectanddocker historyto check parent-child relationships. -
Use
docker rmicarefully to avoid dependency issues.
🚀 Now you have full control over your Docker images & containers! 🚀