Created
September 30, 2014 09:13
-
-
Save goldeneggg/2a299258620f0b884380 to your computer and use it in GitHub Desktop.
wrapper script for official docker container for golang
This file contains 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
#!/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