docker-git-puller/README.md

4.1 KiB

docker-git-puller

An alpine-based docker container that pulls a git repo (updates it) every given amount of time (default 60s) with a shell script. The resulting image is approx. 20MB at size.

Docker Pulls

Purpose

There are many scenarios where such a container could help. For example (as I use it), this image could be used to pull a hugo built website (living in a public git repo) to a local folder, so that another docker container can serve the most recent files.

Please be aware of the fact that this image currently does no merging if some local file changed (maybe up to the future).

See the docker-compose example for a quick overview how this works.

Building

Building this docker image is quite easy. For a quick start, just use this:

docker build -t git-puller .

To do a multi-platform build (here with basic architectures) and upload to Docker Hub (make sure to replace with your Docker Hub username):

docker buildx build --no-cache --platform linux/amd64,linux/arm64/v8 -t <USER>/git-puller . --push

After this is done successfully, you can check out the new image in your local image store with docker images.

Configuration

Essentially, this image can be configured over environment variables.

  • PULL_LOCATION: used to set the container-internal folder which is getting pulled frequently (you should mount one into this direction) - defaults to /to-pull
  • PULL_INTERVAL: the interval between pulls in seconds (minimum is 5, default is 60)
  • PULLER_UID: the uid of the user that executes the git pull command (defaults to 1000)
  • GIT_OUTPUT: if set to 0, the git pull stdout will be hidden from docker logs (redirected to /dev/null ;) (if not set, everything is visible in the docker logs)

Similar projects:

Forum posts:

I learnt much about shell scripts (as I never did any shell coding before) while developing the docker-entrypoint.sh script, and forum posts, websites, etc. helped me alot along my journey (below just an excerpt):

Also, ShellCheck helped me while developing and "optimizing" (if a total beginner can do so ;) this project.

License

see LICENSE.md