summary refs log tree commit diff
path: root/bin/hibiki/enter
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2020-05-19 21:56:22 +0200
committerRobert Günzler <r@gnzler.io>2020-05-19 21:56:22 +0200
commit6a061366d48ab76562c7503f99144cf8e5dbf602 (patch)
tree16496c5900b145f31e08d7e8aeb59e666d3ce818 /bin/hibiki/enter
parent7bce1399fd663dbaa164262cc5d1634c03d8d97d (diff)
bin: Add enter and compose
helpers for working *in* docker containers
Diffstat (limited to 'bin/hibiki/enter')
-rwxr-xr-xbin/hibiki/enter44
1 files changed, 44 insertions, 0 deletions
diff --git a/bin/hibiki/enter b/bin/hibiki/enter
new file mode 100755
index 0000000..67a9806
--- /dev/null
+++ b/bin/hibiki/enter
@@ -0,0 +1,44 @@
+#!/bin/sh
+set -e
+[ -n "$DEBUG" ] && set -x
+
+target=
+img=""
+dockerfile="${PWD}/Dockerfile"
+become=
+
+usage() {
+	printf "usage: %s OPTIONS -- [DOCKER RUN ARGS]\n" "$(basename "$0")"
+	printf "\n"
+	printf "  -t TARGET\n"
+	printf "  -i IMAGE\n"
+	printf "  -f DOCKERFILE\n"
+	printf "  -u (become user)\n"
+	printf "\n"
+	printf "Enter the container defined in Dockerfile, with \$PWD mounted at /src\n"
+	exit 2
+}
+
+while getopts t:i:f:uh o; do
+	case $o in
+	t) 	target="$OPTARG" ;;
+	i) 	img="$OPTARG" ;;
+	f) 	dockerfile="$OPTARG" ;;
+	u) 	become=1 ;;
+	h|?) 	usage ;;
+	esac
+done
+shift $((OPTIND - 1))
+
+[ -z "$img" ] && img="$(basename "$(dirname "$(readlink -f -- "$dockerfile")")")"
+
+extra_args=
+[ -n "$become" ] && extra_args="--user=$(id -u):$(id -g)"
+
+# allow setting this to some non-file value to skip building
+# > enter -i alpine -f none
+# for a quick alpine based container with $PWD mounted in
+[ -f "$dockerfile" ] && \
+	docker build --tag="$img" --target="$target" --file="$dockerfile" "$(dirname "$dockerfile")"
+
+exec docker run --rm -it --mount=type=bind,src="$PWD",dst=/src -w /src $@ $extra_args "$img"