Skip to content

Commit

Permalink
Create Docker images for the examples
Browse files Browse the repository at this point in the history
When those are published on Dockerhub, people will be able to start those
examples in fewer steps than the current documentation:

  https://prometheus.io/docs/introduction/getting_started/#starting-up-some-sample-targets

While relying on Docker may not be always wished, giving the possibility to
quickly start a daemon that exposes metrics can be useful in many tutorials.

The simple and random example are build as static binaries and packaged as
single binaries in Docker images.

This commit tries really hard to limit the number of per-example maintenance
work by sharing most of the Makefile to build the Docker images. The tiny top
level Makefiles in each example directory are strictly identical.

Updates: prometheus#347
  • Loading branch information
dlespiau committed Sep 19, 2017
1 parent 671c87b commit 296fcba
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
_obj
_test

# Examples
/examples/simple/simple
/examples/random/random

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out
Expand Down
25 changes: 25 additions & 0 deletions examples/random/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# This Dockerfile builds an image for a client_golang example.
#
# Use as (from the root for the client_golang repository):
# docker build -f examples/$name/Dockerfile -t prometheus/golang-example-$name .

# The base image contains go, client_golang and client_golang dependencies to
# share as much as possible between the images that will build the various
# examples.
FROM golang:1.9.0 AS base
WORKDIR /go/src/github.com/prometheus/client_golang
COPY . .
WORKDIR /go/src/github.com/prometheus/client_golang/prometheus
RUN go get -d

# Builder image that will build an example.
FROM base AS builder
WORKDIR /go/src/github.com/prometheus/client_golang/examples/random
RUN CGO_ENABLED=0 GOOS=linux go build -a -tags netgo -ldflags '-w'

# Final image.
FROM scratch
LABEL maintainer "The Prometheus Authors <[email protected]>"
COPY --from=builder /go/src/github.com/prometheus/client_golang/examples/random .
EXPOSE 8080
ENTRYPOINT ["/random"]
25 changes: 25 additions & 0 deletions examples/simple/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# This Dockerfile builds an image for a client_golang example.
#
# Use as (from the root for the client_golang repository):
# docker build -f examples/simple/Dockerfile -t prometheus/golang-example-simple .

# The base image contains go, client_golang and client_golang dependencies to
# share as much as possible between the images that will build the various
# examples.
FROM golang:1.9.0 AS base
WORKDIR /go/src/github.com/prometheus/client_golang
COPY . .
WORKDIR /go/src/github.com/prometheus/client_golang/prometheus
RUN go get -d

# Builder image that will build an example.
FROM base AS builder
WORKDIR /go/src/github.com/prometheus/client_golang/examples/simple
RUN CGO_ENABLED=0 GOOS=linux go build -a -tags netgo -ldflags '-w'

# Final image.
FROM scratch
LABEL maintainer "The Prometheus Authors <[email protected]>"
COPY --from=builder /go/src/github.com/prometheus/client_golang/examples/simple .
EXPOSE 8080
ENTRYPOINT ["/simple"]

0 comments on commit 296fcba

Please sign in to comment.