diff --git a/Dockerfile b/Dockerfile index 7bc7d31c231b819948aa5dc84ae7517c19aec0d9..30efeef624e34c433faac4aed1f175a6005a5bea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,21 @@ -FROM debian:stable-slim +FROM debian:stable-slim AS exporter_build -COPY build.sh /tmp/build.sh +WORKDIR /tmp +RUN apt-get -q update && \ + env DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends curl ca-certificates -RUN /tmp/build.sh && rm /tmp/build.sh +RUN MEMCACHED_EXPORTER_VERSION=0.10.0 && \ + curl -vsfL https://github.com/prometheus/memcached_exporter/releases/download/v${MEMCACHED_EXPORTER_VERSION}/memcached_exporter-${MEMCACHED_EXPORTER_VERSION}.linux-amd64.tar.gz | tar xzf - && \ + cp memcached_exporter-${MEMCACHED_EXPORTER_VERSION}.linux-amd64/memcached_exporter /usr/bin/memcached_exporter && \ + rm -fr memcached_exporter* -ENTRYPOINT ["/bin/sh", "-c", "/usr/bin/memcached -m ${MEM:-64} -c ${MAXCONN:-16384} -p ${PORT:-11211} ${ENABLE_SASL:+-S}"] +FROM registry.git.autistici.org/ai3/docker/s6-base:master + +RUN apt-get -q update && \ + env DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends curl memcached && \ + apt-get clean && \ + rm -fr /var/lib/apt/lists/* + +COPY --from=exporter_build /usr/bin/memcached_exporter /usr/bin/memcached_exporter +COPY services.d/ /etc/services.d/ diff --git a/README.md b/README.md index cbcda831d93a4a672ad5ed6477395b40aef6c682..e882982546a8ab773405d1d63d4d39ce7bd8a846 100644 --- a/README.md +++ b/README.md @@ -10,3 +10,6 @@ The server can be configured with environment variables: (a valid */etc/sasldb2* should be mounted into the container for it to work). +The container will run a Prometheus exporter on PORT + 1, this can +be overridden with the `EXPORTER_PORT` environment variable. + diff --git a/build.sh b/build.sh deleted file mode 100755 index 71be2190a12991e928190fbcfd92660e092f8c1c..0000000000000000000000000000000000000000 --- a/build.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -# -# Install script for memcached inside a Docker container. -# - -# The default bitnami/minideb image defines an 'install_packages' -# command which is just a convenient helper. Define our own in -# case we are using some other Debian image. -if [ "x$(which install_packages)" = "x" ]; then - install_packages() { - env DEBIAN_FRONTEND=noninteractive apt-get install -qy -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --no-install-recommends "$@" - } -fi - -die() { - echo "ERROR: $*" >&2 - exit 1 -} - -set -x - -apt -q update - -# Install memcached. -install_packages memcached \ - || die "could not install packages" - -# Clean up. -apt-get autoremove -y -apt-get clean -rm -fr /var/lib/apt/lists/* diff --git a/services.d/exporter/run b/services.d/exporter/run new file mode 100755 index 0000000000000000000000000000000000000000..780a9ca5f9ccf13c106d0d7be29a65d05468a8af --- /dev/null +++ b/services.d/exporter/run @@ -0,0 +1,5 @@ +#!/bin/sh + +default_exporter_port=$(expr ${PORT:-11211} + 1) +exec /usr/bin/memcached_exporter --memcached.address=127.0.0.1:${PORT:-11211} --web.listen-address=:${EXPORTER_PORT:-${default_exporter_port}} + diff --git a/services.d/memcache/finish b/services.d/memcache/finish new file mode 100755 index 0000000000000000000000000000000000000000..b6531b3ca574205c9e78650dbd7c38718683e57c --- /dev/null +++ b/services.d/memcache/finish @@ -0,0 +1,3 @@ +#!/usr/bin/execlineb -S0 + +s6-svscanctl -t /var/run/s6/services diff --git a/services.d/memcache/run b/services.d/memcache/run new file mode 100755 index 0000000000000000000000000000000000000000..8c7aa7f6a1472746567bf888e64d419843b63ea1 --- /dev/null +++ b/services.d/memcache/run @@ -0,0 +1,4 @@ +#!/bin/sh + +exec /usr/bin/memcached -m ${MEM:-64} -c ${MAXCONN:-16384} -p ${PORT:-11211} ${ENABLE_SASL:+-S} +