Introduction to Docker Volumes
• Docker uses storage drivers to manage data inside containers.
• By default, data written to a container is lost when the container stops or is removed.
• Docker volumes provide a persistent storage solution by storing data outside the container filesystem.
Why Use Docker Volumes?
• Persistence: Data remains even if the container is stopped or deleted.
• Sharing Data: Volumes can be shared between multiple containers.
• Performance: Volumes are managed by Docker and offer better performance than bind mounts.
• Backup & Restore: Volumes can be backed up and restored easily.
Types of Storage in Docker
1. Volumes: Managed by Docker and stored in /var/lib/docker/volumes/ on the host.
2. Bind Mounts: Uses a directory from the host filesystem.
3. tmpfs Mounts: Stores data in memory (RAM).
Working with Docker Volumes
Creating a Volume
bash
docker volume create my_volume
• Lists existing volumes:
Bash
docker volume ls
• Inspects volume details:
bash
docker volume inspect my_volume
Using a Volume in a Container
bash
docker run -d –name my_container -v my_volume:/app_data busybox
• The volume my_volume is mounted inside /app_data in the container.
Named vs Anonymous Volumes
• Named Volumes:
Created explicitly (e.g., my_volume).
• Anonymous Volumes:
Created automatically by Docker if -v /path is used without a name.
Mounting a Host Directory as a Volume
bash
docker run -d –name my_container -v /host_path:/container_path busybox
• Uses a bind mount, linking a host directory to the container.
• Removing a Volume
bash
docker volume rm my_volume
• Remove all unused volumes:
bash
docker volume prune
Advanced Volume Usage
• Sharing Volumes Between Containers
bash
docker run -d –name container1 -v shared_volume:/data busybox
docker run -d –name container2 -v shared_volume:/data busybox
• Read-Only Volumes
bash
docker run -d –name my_container -v my_volume:/data:ro busybox
(The container can only read from /data, but not modify it.)
• Backing Up a Volume
bash
docker run –rm -v my_volume:/data -v $(pwd):/backup busybox tar -cvf /backup/backup.tar /data
(Creates a backup file in the current directory.)
• Restoring a Volume
bash
docker run –rm -v my_volume:/data -v $(pwd):/backup busybox tar -xvf /backup/backup.tar -C /data
Volume Management in Docker Compose
• Define a volume in a docker-compose.yml file:
yaml
CopyEdit
version: ‘3’
services:
app:
image: nginx
volumes:
– my_volume:/usr/share/nginx/html
volumes:
my_volume:
Conclusion
• Docker volumes are the recommended way to persist data in containers.
• They improve performance, portability, and management of data storage.
• Useful for databases, shared storage between containers, and maintaining stateful applications.