# How To Deal With Persistent Storage (e.g. Databases) In Docker?

The best way to deal with persistent data storage (such as a database) in Docker is to use Docker’s volume API (for docker 1.9.0 or newer) or use data-only containers for older versions of Docker.

## Docker 1.9.0 or newer

The best approach for you is to use `docker volume` API as shown in the following example:

```bash
docker volume create --name myvolume
docker run -d -v myvolume:/container/path/for/volume container_image my_command
```

Let’s break down the example command:

- The first command creates a new volume named `myvolume` in the current working directory
- The second command runs the container image `container_image` and configures it to consume the newly created volume `myvolume`

If you create a container with a `-v volume_name:/container/fs/path` Docker will automatically create a named volume for you that can:

1. Be listed through the `docker volume ls`
2. Be identified through the `docker volume inspect volume_name`
3. Backed up as a regular directory
4. Backed up as before through a `--volumes-from` connection

You can also identify dangling volumes (unused volumes)

```bash
docker volume ls -f dangling=true
```

And then remove them using their name:

```bash
docker volume rm <volume_name>
```

## Docker 1.8.X and older

The approach that seems to work best for production is to use a data-only container. The data-only container is run on a barebones image and does nothing except expose a data volume.

Then you can run any other container to have access to the data container volumes:

```bash
docker run --volumes-from data_container some_other_container command_to_exec
```

You can read more about this technique in the [official documentation](https://docs.docker.com/storage/volumes/).
