Programster's Blog

Tutorials focusing on Linux, programming, and open-source

Deploy Prometheus With Docker

Create Prometheus Config

Create a file called prometheus.yml with the following contents:

# my global config
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    - targets: ['localhost:9090']

... or run the following command to download the example from Github.


Create Data Volume Directory

Now we need to create a directory that will act as a volume for our Prometheus container. That way all state will persist across reboots.

mkdir $HOME/prometheus-data
chmod 777 $HOME/prometheus-data

I don't like having to set permissions to 777 on the directory, but that is the only way I could get it to work (for now).


Now run the following container to deploy your prometheus service:

docker run \
  -p 80:9090 \
  --volume $HOME/prometheus.yml:/etc/prometheus/prometheus.yml \
  --volume $HOME/prometheus-data:/prometheus \

I map the default port of 9090 to port 80 so that I don't have to enter a port number into my browser URL, but you may wish to change it back to 9090.


You now have a prometheus server deployed. Later we will learn how to deploy an exporter to "scrape" from, and how to add authentication.

Last updated: 22nd January 2020
First published: 22nd January 2020