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.
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.
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)
I learnt much about shell scripts (as I never did any shell coding before) while developing the [docker-entrypoint.sh](docker-entrypoint.sh) script, and forum posts, websites, etc. helped me alot along my journey (below just an excerpt):
- [Another check for the existence of env vars](https://stackoverflow.com/questions/2981878/checking-for-environment-variables)
- [Check if a variable is a number](https://www.baeldung.com/linux/bash-variable-is-numeric)
- [Check for the existence of a directory](https://stackoverflow.com/questions/59838/how-do-i-check-if-a-directory-exists-or-not-in-a-bash-shell-script)
- [Check if current directory is a git repository](https://stackoverflow.com/questions/2180270/check-if-current-directory-is-a-git-repository)
- [Differences between the different braces in the shell](https://unix.stackexchange.com/questions/306111/what-is-the-difference-between-the-bash-operators-vs-vs-vs)
Also, [ShellCheck](https://www.shellcheck.net/) helped me while developing and "optimizing" (if a total beginner can do so ;) this project.