diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..1460bc2 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,47 @@ +name: Docker + +on: + push: + tags: + - "v*" + +permissions: + contents: read + packages: write + +env: + DOCKER_REPO: ghcr.io/discourse/prometheus_exporter + +jobs: + build-and-publish: + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Set vars + id: vars + run: | + echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT + + - uses: actions/checkout@v3 + - uses: docker/setup-qemu-action@v2 + - uses: docker/setup-buildx-action@v2 + + - name: Login to Github Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push images + uses: docker/build-push-action@v3 + with: + context: . + push: true + platforms: linux/amd64,linux/arm64 + build-args: | + GEM_VERSION=${{ steps.vars.outputs.version }} + tags: | + ${{ env.DOCKER_REPO }}:${{ steps.vars.outputs.version }} + ${{ env.DOCKER_REPO }}:latest diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..33a1a9d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +ARG RUBY_VERSION=3.1 +ARG GEM_VERSION= + +FROM ruby:${RUBY_VERSION}-slim + +RUN gem install --no-doc --version=${GEM_VERSION} prometheus_exporter + +EXPOSE 9394 +ENTRYPOINT ["prometheus_exporter", "-b", "ANY"] diff --git a/README.md b/README.md index 46226ce..8ef8bd9 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ To learn more see [Instrumenting Rails with Prometheus](https://samsaffron.com/a * [Transport concerns](#transport-concerns) * [JSON generation and parsing](#json-generation-and-parsing) * [Logging](#logging) +* [Docker Usage](#docker-usage) * [Contributing](#contributing) * [License](#license) * [Code of Conduct](#code-of-conduct) @@ -963,6 +964,28 @@ You can also pass a log level (default is [`Logger::WARN`](https://ruby-doc.org/ PrometheusExporter::Client.new(log_level: Logger::DEBUG) ``` +## Docker Usage + +You can run `prometheus_exporter` project using an official Docker image: + +```bash +docker pull discourse/prometheus_exporter:latest +# or use specific version +docker pull discourse/prometheus_exporter:x.x.x +``` + +The start the container: + +```bash +docker run -p 9394:9394 discourse/prometheus_exporter +``` + +Additional flags could be included: + +``` +docker run -p 9394:9394 discourse/prometheus_exporter --verbose --prefix=myapp +``` + ## Docker/Kubernetes Healthcheck A `/ping` endpoint which only returns `PONG` is available so you can run container healthchecks :