Skip to content

Instantly share code, notes, and snippets.

@goldeneggg
Created September 30, 2014 09:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save goldeneggg/2a299258620f0b884380 to your computer and use it in GitHub Desktop.
Save goldeneggg/2a299258620f0b884380 to your computer and use it in GitHub Desktop.
wrapper script for official docker container for golang
#!/bin/sh
usage() {
cat << __EOT__
Usage: $0 [-br] <app go package path>
Run official golang docker container
Options:
-b | --build run container and build go app
-m | --make run build by make
-r | --run run container and run go app
-v | --version target go version (default = 1.3.1)
-h | --help print a summary of the options
Args:
<app_go_package_path> Your go package path (ex. github.com/goldeneggg/ipcl)
__EOT__
}
declare -r default_go_ver="1.3.1"
declare go_ver=${default_go_ver}
unset go_build go_make go_run go_app
while true; do
case "$1" in
-h | --help ) usage; exit 1 ;;
-b | --build) go_build=true; shift ;;
-m | --make) go_make=true; shift ;;
-r | --run) go_run=true; shift ;;
-v | --version ) go_ver=$2; shift 2 ;;
* ) break ;;
esac
done
if [ ! ${go_build} ]
then
if [ ! ${go_run} ]
then
echo "build or run option must be specified"
usage
exit 1
fi
fi
if [ $# -lt 1 ]; then
echo "App argument must be specified"
usage
exit 1
fi
go_app=$1
shift
argv=("$@")
unset go_app_url
if [ `echo ${go_app} | grep 'github.com'` ]
then
go_app_url="https://${go_app}.git"
fi
echo "go version: ${go_ver}"
# git clone go app
git clone ${go_app_url}
n=$(basename ${go_app_url})
name=${n%.*}
cd ${name}
if [ $go_build ]
then
# build
if [ -f Dockerfile ]
then
rm -f Dockerfile
fi
wget https://raw.githubusercontent.com/docker-library/golang/master/${go_ver}/Dockerfile
if [ -f go-wrapper ]
then
rm -f go-wrapper
fi
wget https://raw.githubusercontent.com/docker-library/golang/master/${go_ver}/go-wrapper
# add dependency packages into Dockerfile
for dep_pkg in ${argv[@]}
do
echo "RUN go get ${dep_pkg}" >> Dockerfile
done
# docker build
docker build -t golang:${go_ver} .
# app build
build_cmd="go build -v"
if [ ${go_make} ]
then
build_cmd="make"
fi
docker run --rm -v "$(pwd)":/go/src/${go_app} -w /go/src/${go_app} golang:${go_ver} ${build_cmd}
else
# docker run
cat <<EOT >> Dockerfile
FROM golang:${go_ver}-onbuild
ENTRYPOINT ["app"]
EOT
docker build -t ${name} .
docker run -it --rm --name my-running ${name} ${args}
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment