added a script to build/publish docker images
diff --git a/docker/ci-docker.sh b/docker/ci-docker.sh
new file mode 100755
index 0000000..d891976
--- /dev/null
+++ b/docker/ci-docker.sh
@@ -0,0 +1,135 @@
+#!/bin/bash
+set -o errexit
+
+realpath() {
+  echo "$(cd "$(dirname "$1")"; pwd)/$(basename "$1")"
+}
+
+DOCKER_DIR=$(dirname $(realpath $0))
+PROJECT_DIR=$(dirname $DOCKER_DIR )
+SCRATCH_DIR="$HOME/.heron-docker"
+
+cleanup() {
+  if [ -d $SCRATCH_DIR ]; then
+    echo "Cleaning up scratch dir"
+    rm -rf $SCRATCH_DIR
+  fi
+}
+
+trap cleanup EXIT
+
+
+setup_scratch_dir() {
+  if [ ! -f "$1" ]; then
+    mkdir $1
+    mkdir $1/artifacts
+  fi
+
+  cp $DOCKER_DIR/* $1
+}
+
+build_exec_image() {
+  INPUT_TARGET_PLATFORM=$1
+  HERON_VERSION=$2
+  DOCKER_TAG_PREFIX=$3
+  OUTPUT_DIRECTORY=$(realpath $4)
+
+  if [ "$INPUT_TARGET_PLATFORM" == "latest" ]; then 
+    TARGET_PLATFORM="ubuntu14.04"
+    DOCKER_TAG="$DOCKER_TAG_PREFIX/heron:$HERON_VERSION"
+    DOCKER_LATEST_TAG="$DOCKER_TAG_PREFIX/heron:latest"
+    DOCKER_IMAGE_FILE="$OUTPUT_DIRECTORY/heron-$HERON_VERSION.tar"
+  else
+    TARGET_PLATFORM="$INPUT_TARGET_PLATFORM"
+    DOCKER_TAG="$DOCKER_TAG_PREFIX/heron-$TARGET_PLATFORM:$HERON_VERSION"
+    DOCKER_LATEST_TAG="$DOCKER_TAG_PREFIX/heron-$TARGET_PLATFORM:latest"
+    DOCKER_IMAGE_FILE="$OUTPUT_DIRECTORY/heron-$TARGET_PLATFORM-$HERON_VERSION.tar"
+  fi
+
+  DOCKER_FILE="$SCRATCH_DIR/Dockerfile.dist.$TARGET_PLATFORM"
+
+  setup_scratch_dir $SCRATCH_DIR
+
+  # need to copy artifacts locally
+  TOOLS_FILE="$OUTPUT_DIRECTORY/heron-tools-install.sh"
+  TOOLS_OUT_FILE="$SCRATCH_DIR/artifacts/heron-tools-install.sh"
+  
+  CORE_FILE="$OUTPUT_DIRECTORY/heron-core.tar.gz"
+  CORE_OUT_FILE="$SCRATCH_DIR/artifacts/heron-core.tar.gz"
+ 
+  cp $TOOLS_FILE $TOOLS_OUT_FILE
+  cp $CORE_FILE $CORE_OUT_FILE
+ 
+  export HERON_VERSION
+
+  # build the image
+  echo "Building docker image with tag:$DOCKER_TAG"
+  if [ "$HERON_VERSION" == "nightly" ]; then 
+    docker build --build-arg heronVersion=$HERON_VERSION -t "$DOCKER_TAG" -f "$DOCKER_FILE" "$SCRATCH_DIR"
+  else
+    docker build --build-arg heronVersion=$HERON_VERSION -t "$DOCKER_TAG" -t "$DOCKER_LATEST_TAG" -f "$DOCKER_FILE" "$SCRATCH_DIR"
+  fi
+
+  # save the image as a tar file
+  echo "Saving docker image to $DOCKER_IMAGE_FILE"
+  docker save -o $DOCKER_IMAGE_FILE $DOCKER_TAG
+}
+
+publish_exec_image() {
+  INPUT_TARGET_PLATFORM=$1
+  HERON_VERSION=$2
+  DOCKER_TAG_PREFIX=$3
+  INPUT_DIRECTORY=$(realpath $4)
+
+  if [ "$INPUT_TARGET_PLATFORM" -eq "latest" ]; then 
+    TARGET_PLATFORM="ubuntu14.04"
+    DOCKER_TAG="$DOCKER_TAG_PREFIX/heron:$HERON_VERSION"
+    DOCKER_LATEST_TAG="$DOCKER_TAG_PREFIX/heron:latest"
+    DOCKER_IMAGE_FILE="$INPUT_DIRECTORY/heron-$HERON_VERSION.tar"
+  else
+    TARGET_PLATFORM="$INPUT_TARGET_PLATFORM"
+    DOCKER_TAG="$DOCKER_TAG_PREFIX/heron-$TARGET_PLATFORM:$HERON_VERSION"
+    DOCKER_LATEST_TAG="$DOCKER_TAG_PREFIX/heron-$TARGET_PLATFORM:latest"
+    DOCKER_IMAGE_FILE="$INPUT_DIRECTORY/heron-$TARGET_PLATFORM-$HERON_VERSION.tar"
+  fi
+
+  # publish the image to docker hub
+  if [ "$HERON_VERSION" == "nightly" ]; then 
+    docker load -i $DOCKER_IMAGE_FILE
+    docker push "$DOCKER_TAG"
+  else
+    docker load -i $DOCKER_IMAGE_FILE
+    docker push "$DOCKER_TAG"
+    docker push "$DOCKER_LATEST_TAG"
+  fi
+}
+
+docker_image() {
+  OPERATION=$1
+
+  if [ "$OPERATION" == "build" ]; then
+    build_exec_image $2 $3 $4 $5
+  elif [ "$OPERATION" == "publish" ]; then
+    publish_exec_image $2 $3 $4 $5
+  else
+    echo "invalid operation"
+  fi
+}
+
+case $# in
+  5)
+    docker_image $1 $2 $3 $4 $5
+    ;;
+
+  *)
+    echo "Usage: $0 <operation> <platform> <version_string> <tag-prefix> <input-output-directory> "
+    echo "  "
+    echo "Platforms Supported: latest ubuntu14.04, ubuntu15.10, ubuntu16.04 centos7"
+    echo "  "
+    echo "Example:"
+    echo "  $0 build ubuntu14.04 0.12.0 heron ."
+    echo "  $0 publish ubuntu14.04 0.12.0 streamlio ~/ubuntu"
+    echo "  "
+    exit 1
+    ;;
+esac