Created
July 16, 2018 08:36
-
-
Save cheeyeo/9ad2f0a28c440de3d6371836f036e0af to your computer and use it in GitHub Desktop.
Creating docker container script from phusion ? 2016...?
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
# example multistage process docker build script from https://blog.phusion.nl/2016/08/31/efficiently-and-conveniently-building-ruby-and-node-js-application-docker-containers-for-production-2 | |
set -e | |
export IMAGE_NAME=tinco/express-example | |
export RUN_BUILD="docker run -it --rm -v $PWD:/usr/src/app -w /usr/src/app node:6" | |
export TEST_COMMAND="./node_modules/mocha/bin/mocha" | |
function run_image() { | |
docker run -it --entrypoint /bin/sh $IMAGE_NAME -c $1 | |
} | |
function build_image() { | |
$RUN_BUILD npm install | |
docker build -t $IMAGE_NAME . | |
} | |
function test_image() { | |
run_image $TEST_COMMAND | |
} | |
function check_git() { | |
if [[ `git status --porcelain` ]]; then | |
echo "Current working directory is dirty, run 'git status' for details." | |
exit 1 | |
fi | |
if [[ `git branch --no-color|grep "*"|awk '{ print $2 }'` != $TAG ]]; then | |
echo "Current branch is not $TAG, checkout and merge that branch before releasing." | |
exit 1 | |
fi | |
} | |
function push() { | |
git push | |
docker tag $IMAGE_NAME $IMAGE_NAME:$TAG | |
docker push $IMAGE_NAME:$TAG | |
} | |
case "$1" in | |
build) | |
build_image | |
;; | |
test) | |
$RUN_BUILD $TEST_COMMAND | |
;; | |
test_image) | |
test_image | |
;; | |
release) | |
export TAG=$2 | |
if [ -z "$TAG" ]; then | |
echo "Please supply the tag to be released (i.e. ./docker.sh release production)" | |
exit 1 | |
fi | |
build_image | |
test_image | |
check_git | |
push | |
;; | |
install) | |
shift | |
$RUN_BUILD npm install --save "$@" | |
;; | |
*) | |
echo "Usage: ./docker.sh <command>" | |
echo "" | |
echo "For <command> choose any of: build, test, test_image, install, release" | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment