first commit
This commit is contained in:
commit
256e9b9fc6
6 changed files with 84 additions and 0 deletions
1
.dockerignore
Normal file
1
.dockerignore
Normal file
|
|
@ -0,0 +1 @@
|
|||
!entrypoint.sh
|
||||
24
Dockerfile
Normal file
24
Dockerfile
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
ARG ALPINE_VERSION=3.21
|
||||
FROM alpine:${ALPINE_VERSION}
|
||||
|
||||
ARG SUPERCRONIC_VERSION=0.2.33
|
||||
# TARGETARCH is auto-set by buildx per platform: "amd64", "arm64", etc.
|
||||
ARG TARGETARCH
|
||||
|
||||
RUN apk add --no-cache docker-cli
|
||||
|
||||
ADD https://github.com/aptible/supercronic/releases/download/v${SUPERCRONIC_VERSION}/supercronic-linux-${TARGETARCH} \
|
||||
/usr/local/bin/supercronic
|
||||
RUN chmod +x /usr/local/bin/supercronic
|
||||
|
||||
# Match GID to your host's docker group. Check with: stat -c '%g' /var/run/docker.sock
|
||||
ARG DOCKER_GID=999
|
||||
RUN getent group ${DOCKER_GID} || addgroup -g ${DOCKER_GID} dockersock && \
|
||||
adduser -D -G $(getent group ${DOCKER_GID} | cut -d: -f1) cannibal
|
||||
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
USER cannibal
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
7
README.md
Normal file
7
README.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# Cannibal
|
||||
|
||||
eats docker data omnom nom
|
||||
|
||||
## But what it really does?
|
||||
|
||||
Runs docker system prune periodically
|
||||
28
build.sh
Executable file
28
build.sh
Executable file
|
|
@ -0,0 +1,28 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
IMAGE="${IMAGE:-docker-pruner}"
|
||||
TAG="${TAG:-latest}"
|
||||
DOCKER_GID="${DOCKER_GID:-$(stat -c '%g' /var/run/docker.sock)}"
|
||||
SUPERCRONIC_VERSION="${SUPERCRONIC_VERSION:-0.2.33}"
|
||||
ALPINE_VERSION="${ALPINE_VERSION:-3.21}"
|
||||
|
||||
if ! docker buildx inspect multibuilder > /dev/null 2>&1; then
|
||||
echo "Creating multibuilder..."
|
||||
docker buildx create --name multibuilder --use
|
||||
else
|
||||
docker buildx use multibuilder
|
||||
fi
|
||||
|
||||
echo "Building ${IMAGE}:${TAG} for linux/amd64 and linux/arm64"
|
||||
echo " Alpine: ${ALPINE_VERSION}"
|
||||
echo " Supercronic: ${SUPERCRONIC_VERSION}"
|
||||
echo " DOCKER_GID: ${DOCKER_GID}"
|
||||
|
||||
docker buildx build \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--build-arg ALPINE_VERSION="${ALPINE_VERSION}" \
|
||||
--build-arg SUPERCRONIC_VERSION="${SUPERCRONIC_VERSION}" \
|
||||
--build-arg DOCKER_GID="${DOCKER_GID}" \
|
||||
--tag "${IMAGE}:${TAG}" \
|
||||
.
|
||||
14
docker-compose.yml
Normal file
14
docker-compose.yml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
services:
|
||||
cannibal:
|
||||
image: cannibal:latest
|
||||
build:
|
||||
context: .
|
||||
args:
|
||||
DOCKER_GID: "${DOCKER_GID:-999}"
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
PRUNE_SCHEDULE: "0 3 * * *" # every day at 3am
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
group_add:
|
||||
- "${DOCKER_GID:-999}"
|
||||
10
entrypoint.sh
Normal file
10
entrypoint.sh
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
echo "Docker pruner starting as $(whoami). Schedule: ${PRUNE_SCHEDULE}"
|
||||
|
||||
# Write crontab from env var at runtime
|
||||
CRONTAB_FILE=/tmp/crontab
|
||||
echo "${PRUNE_SCHEDULE} docker system prune -af >> /tmp/prune.log 2>&1" > "${CRONTAB_FILE}"
|
||||
|
||||
exec supercronic "${CRONTAB_FILE}"
|
||||
Loading…
Reference in a new issue