--mount='type=volume,dst=/external-drive,volume-driver=local,volume-opt=device=/dev/loop5,volume-opt=type=ext4' \
ubuntu bash
```
When the container starts, the path `/external-drive` mounts the
`disk.raw` file from the host filesystem as a block device.
5. When you're done, and the device is unmounted from the container,
detach the loop device to remove the device from the host system:
```console
$ losetup -d /dev/loop5
```
## Back up, restore, or migrate data volumes
Volumes are useful for backups, restores, and migrations.
Use the `--volumes-from` flag to create a new container that mounts that volume.
### Back up a volume
For example, create a new container named `dbstore`:
```console
$ docker run -v /dbdata --name dbstore ubuntu /bin/bash
```
In the next command:
- Launch a new container and mount the volume from the `dbstore` container
- Mount a local host directory as `/backup`
- Pass a command that tars the contents of the `dbdata` volume to a `backup.tar` file inside the `/backup` directory.
```console
$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
```
When the command completes and the container stops, it creates a backup of
the `dbdata` volume.
### Restore volume from a backup
With the backup just created, you can restore it to the same container,
or to another container that you created elsewhere.
For example, create a new container named `dbstore2`:
```console
$ docker run -v /dbdata --name dbstore2 ubuntu /bin/bash
```
Then, un-tar the backup file in the new container’s data volume:
```console
$ docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"
```
You can use these techniques to automate backup, migration, and restore
testing using your preferred tools.
## Remove volumes
A Docker data volume persists after you delete a container. There are two types
of volumes to consider:
- Named volumes have a specific source from outside the container, for example, `awesome:/bar`.
- Anonymous volumes have no specific source. Therefore, when the container is deleted, you can instruct the Docker Engine daemon to remove them.
### Remove anonymous volumes
To automatically remove anonymous volumes, use the `--rm` option. For example,
this command creates an anonymous `/foo` volume. When you remove the container,
the Docker Engine removes the `/foo` volume but not the `awesome` volume.
```console
$ docker run --rm -v /foo -v awesome:/bar busybox top
```
> [!NOTE]
>
> If another container binds the volumes with
> `--volumes-from`, the volume definitions are _copied_ and the
> anonymous volume also stays after the first container is removed.
### Remove all volumes
To remove all unused volumes and free up space:
```console
$ docker volume prune
```
## Next steps
- Learn about [bind mounts](bind-mounts.md).
- Learn about [tmpfs mounts](tmpfs.md).
- Learn about [storage drivers](/engine/storage/drivers/).
- Learn about [third-party volume driver plugins](/engine/extend/legacy_plugins/).