-
-
Save bryaneaton/6813e8a4c78524628d373dbbb5fbd254 to your computer and use it in GitHub Desktop.
Docker build script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# ex: set fdm=marker | |
# usage {{{1 | |
#/ Usage: | |
#/ ./build.sh -r "REGISTRY/NAME" [OPTIONS] | |
#/ | |
#/ -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="" | |
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 | |
-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 "DOKCER_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" . || die "Image failed to build." | |
docker push "$REGISTRY:$TAG" || die "Couldn't push $REGISTRY:$TAG" | |
# 1}}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment