# How to Persist Data in Prometheus Running in a Docker Container?

Persisting data in Prometheus while running it in a Docker container is crucial to ensure that your metrics data is not lost when the container is stopped or removed. Here’s a step-by-step guide on how to achieve this by using Docker volumes to persist the data.

[ad-logs-small]


### Step 1: Create a Docker Volume

First, create a Docker volume that will be used to store Prometheus data. This volume will ensure that your data persists even if the Prometheus container is removed.

```bash
docker volume create prometheus_data
```

### Step 2: Create a Prometheus Configuration File

Create a Prometheus configuration file (e.g., `prometheus.yml`). This file will define the scraping configurations and other settings.

Here’s a simple example of a `prometheus.yml` configuration:

```yaml
global:
  scrape_interval: 15s  # Default scrape interval

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

```

### Step 3: Run the Prometheus Container

Now, you can run the Prometheus container, mounting the configuration file and the data volume you created earlier.

```bash
docker run -d \\
  --name prometheus \\
  -p 9090:9090 \\
  -v prometheus_data:/prometheus \\
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \\
  prom/prometheus \\
  --config.file=/etc/prometheus/prometheus.yml \\
  --storage.tsdb.path=/prometheus

```

### Breakdown of the Command

- `d`: Run the container in detached mode.
- `-name prometheus`: Give the container a name.
- `p 9090:9090`: Map port 9090 of the container to port 9090 on the host, allowing you to access the Prometheus web interface.
- `v prometheus_data:/prometheus`: Mount the Docker volume `prometheus_data` to the `/prometheus` directory in the container, where Prometheus will store its data.
- `v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml`: Mount the local Prometheus configuration file into the container.
- `prom/prometheus`: Specify the image to use.
- `-config.file=/etc/prometheus/prometheus.yml`: Point Prometheus to the configuration file.
- `-storage.tsdb.path=/prometheus`: Specify the storage path for Prometheus data.

### Step 4: Verify Data Persistence

1. **Access Prometheus**: Open your web browser and go to `http://localhost:9090` to access the Prometheus interface.
2. **Check the Metrics**: After some time, you should see metrics being collected based on the configuration provided in `prometheus.yml`.
3. **Stop and Restart the Container**: To verify that data persists, you can stop and remove the container:
    
    ```bash
    docker stop prometheus
    docker rm prometheus
    ```
    
4. **Re-run the Container**: When you start the Prometheus container again using the same command, it should retain the previously collected metrics because the data is stored in the Docker volume.

### Step 5: Managing the Data Volume

To manage the persistent data, you can list your Docker volumes with:

```bash
docker volume ls
```

If you need to remove the volume later (and thus delete all stored metrics), you can do so with:

```bash
docker volume rm prometheus_data
```

### Conclusion

By following these steps, you can successfully persist Prometheus data in a Docker container using Docker volumes. This setup ensures that your monitoring data is retained across container restarts and removals, allowing for consistent metrics collection and analysis.

[ad-uptime]
