Skip to content

Instantly share code, notes, and snippets.

@sempervent
Last active December 21, 2021 22:19
Show Gist options
  • Save sempervent/a28bf344fd93d2212e762a36a94cdadb to your computer and use it in GitHub Desktop.
Save sempervent/a28bf344fd93d2212e762a36a94cdadb to your computer and use it in GitHub Desktop.
Docker build script
#!/usr/bin/env bash
# ex: set fdm=marker
# usage {{{1
#/ Usage:
#/ ./build.sh -r "REGISTRY/NAME" [OPTIONS]
#/
#/ -c|--context)
#/ the context in which to do the `docker build`
#/
#/ -r|--registry)
#/ the name of the image or registry to push to [required]
#/
#/ -t|--tag)
#/ the tag to assign the docker image
#/
#/ -n|--no-cache)
#/ do not use the cache when building this image
#/
#/ -f|--file)
#/ the Dockerfile to specify during build
#/
#/ -b|--old-build-kit)
#/ use the older docker build kit (better debugging)
#/
#/ -h|-?|--help)
#/ show this help and exit
#/
#/
# 1}}}
# environment {{{1
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
PROJECT=${PROJECT:-"Some Project Name in $DIR"}
DOCKER_FILE="Dockerfile"
TAG="latest"
NOCACHED=""
CONTEXT="."
BUILD_KIT=1
# 1}}}
# functions {{{1
banner() { # {{{2
BANNER="$(cat <<EOF
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWx,;dXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMWNKl. 'dXMMMMMMNK0XNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMWKOdl:,.. ;0MMMMWd....;cox0NWMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMWKxc,. .';, ;kNMMMMWKdl:,.. ..:oONWMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMN0o;. .;lxOXNWx..;kNMMMMMMMMMMMWNKko:.. .cxXWMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMWKd;. .,lkXWMMMMMMN0KNMMMMMMMMMMMMMMMMMMWN0d:. .cONMMMMMMMMMMMMMMM
MMMMMMMMMMMW0l. 'lONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKx:. .,xXMMMMMMMMMMMMM
MMMMMMMMMW0c. .;kXMMMMMMMMMMMMMMKo::::::::::ckWMMMMMMMMMMMMMW0o. ,xNMMMMMMMMMMM
MMMMMMMMXo. .:ONMMMMMMMMWMMMMMMMk. :NMMMMMMWWMMMMMMMWXo. ;OWMMMMMMMMM
MMMMMMWO, ,kNMMMMMMMWKo:xNMMMWNd. ;KWMMMW0lckNMMMMMMMWKl. .oXMMMMMMMM
MMMMMNd. .lXMMMMMMMWKo. ,dko:'. .;lxkc. .;kNMMMMMMMWk' :KWMMMMMM
MMMMNo. .xNMMMMMMWKo. .;kNMMMMMMWK: ,0MMMMMM
MMMNo. 'kWMMMMMWKo. .;kNMMMMMMXc ,0MMMMM
MMWd. .kWMMMMMMWx. .,codxkxxxdl:'. :KMMMMMMMXc ;KMMMM
MMO' .dWMMMMMMMMW0c. .ckXWMMMMMMMMMMWN0d;. ,xXMMMMMMMMMK; lNMMM
MX: cXMMMMMMMMMMM0, .dXWMMMMMMMMMMMMMMMMMNO:. .dWMMMMMMMMMMMk. .kMMM
Mk. .OMMMMMMMMMMMXc :KWMMMMMMMMMMMMMMMMMMMMMNx. .kWMMMMMMMMMMNc cNMM
Nl :XMMMMMW0oooo;. cXMMMMMMMMMMMMMMMMMMMMMMMMWk. 'loooxXMMMMMMk. 'OMM
X; oWMMMMMNl ,KMMMMMMMMMMMMMMMMMMMMMMMMMMWd. 'OMMMMMMK, .xMM
0' .xMMMMMMNl oWMMMMMMMMMMMMMMMMMMMMMMMMMMM0' '0MMMMMMX: oWM
0' .kMMMMMMWl .xMMMMMMMMMMMMMMMMMMMMMMMMMMMMK; '0MMMMMMX: lWM
0' .xMMMMMMWl oWMMMMMMMMMMMMMMMMMMMMMMMMMMM0' 'OMMMMMMX: oWM
X; oWMMMMMNl ,KMMMMMMMMMMMMMMMMMMMMMMMMMMWd. 'OMMMMMMK, .xMM
Nl :XMMMMMW0oooo;. cXMMMMMMMMMMMMMMMMMMMMMMMMWk. 'loooxXMMMMMMk. 'OMM
Mk. .OMMMMMMMMMMMXc :KWMMMMMMMMMMMMMMMMMMMMMNx. .kWMMMMMMMWNNXc cXMM
MX: lNMMMMMMMMMMM0, .oKWMMMMMMMMMMMMMMMMMNO: .oWMMMMMMMWx,,;. .kMMM
MMKolOWMMMMMMMMMW0c. .ckKWMMMMMMMMMMWN0o,. ,xNMMMMMMWx. .:cxN
MMMMMMMMMMMMMMMWx. .,codxxxxxdl:'. :KMMMMMMNo. .lX
MMMMMMMMMMMMMMMWKo. .;kNMMMMMMMXl.,cdOXWM
MMMMMMMNOkOKXWWMMWKo. .;kNMMMMMMMMMMNXNMMMMMM
MMMMMMMk. ..,:kWMMWKo. ,dko:'. .;lxkc. .;kNMMMMMMMMMMMMMMMMMMMMM
MMMMMMNl .,xWMMMMWKocxNMMMWNd. ;0WMMMW0lckNMMMMMMMWKxd0WMMMMMMMMMM
MMMMMM0' ,kNMMMMMMMMWMMMMMMMk. :NMMMMMMMMMMMMMMMWXo. .oNMMMMMMMMMM
MMMMMMXl;okc. .;kNMMMMMMMMMMMMMMKo::::::::::ckWMMMMMMMMMMMMMW0o. ,xNMMMMMMMMMMM
MMMMMMMWWWMW0l. 'oONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKx:. .;xXMMMMMMMMMMMMM
MMMMMMMMMMMMMWKd,. .,lkXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMWN0d:. .cONMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMN0o;. .;lxOXNWMMMMMMMMMMMMMMMMMWX0ko:.. .ckXWMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMWKxl,. ..;cloxxkkkkkkkxdol:,.. ..:oOXWMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMWXOdl:,... ...;cok0NWMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMWNKOxdlc:;;;;;:codk0XWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
EOF
)"
BANNER="$BANNER\n \033[32m Docker Image Builder\033[39m"
echo -e "$BANNER\n\n"
} # 2}}}
die() { # {{{2
echo -e "\033[31mFAILURE:\033[39m $1"
exit 1
} # 2}}}
warn() { # {{{2
echo -e "\033[33mWARNING:\033[39m $1"
} # 2}}}
show_help() { # {{{2
grep '^#/' "${BASH_SOURCE[0]}" | cut -c4- || \
die "Failed to display usage information"
} # 2}}}
# 1}}}
# arguments {{{1
while :; do
case $1 in # check arguments {{{2
-c|--context) # Context for image to be built in {{{3
CONTEXT=$2
shift 2
-t|--tag) # Docker tag {{{3
TAG=$2
shift 2
;; # 3}}}
-n|--no-cache) # build without cache {{{3
NOCACHED="--no-cache"
shift
;; # 3}}}
-f|--file) # Dockerfile to use {{{3
DOCKER_FILE=$2
shift 2
;; # 3}}}
-r|--registry) # the registry to push to
REGISTRY="$2"
shift
;;
-b|--old_build_kit) # the buildkit setting
BUILD_KIT=0
shift
;;
-h|-\?|--help) # help {{{3
banner
show_help
exit
;; # 3}}}
-?*) # unknown argument {{{3
warn "Unknown option (ignored): $1"
shift
;; # 3}}}
*) # default {{{3
break # 3}}}
esac # 2}}}
done
# 1}}}
# logic {{{1
banner
info "DOCKER_BUILDKIT=$BUILD_KIT"
info "BUILDING $REGISTRY:$TAG using $DOCKER_FILE and these flags:"
info "\t$NOCACHED"
DOCKER_BUILDKIT=$BUILD_KIT docker build -f "$DOCKER_FILE" $NOCACHED \
-t "$REGISTRY:$TAG" $CONTEXT || die "Image failed to build."
docker push "$REGISTRY:$TAG" || die "Couldn't push $REGISTRY:$TAG"
# 1}}}
@sempervent
Copy link
Author

sempervent commented Jul 15, 2021

Add a function to your .bashrc like the following:

make_build() {
wget https://gist.github.com/sempervent/a28bf344fd93d2212e762a36a94cdadb/raw/293289e13411942f0d037e991a057efc73055d07/build.sh
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment