You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by mo...@apache.org on 2017/04/28 09:56:18 UTC
zeppelin git commit: [ZEPPELIN-1711] Create `Dockerfile`s for
released bin
Repository: zeppelin
Updated Branches:
refs/heads/master bba0a7b47 -> 5c3291c71
[ZEPPELIN-1711] Create `Dockerfile`s for released bin
### What is this PR for?
Created `Dockerfile` for released bin
- based on **Ubuntu:16.04 (LTS)** for desktop usage
- **JDK 8**
- **R** with basic packages
- **Python 2** with basic packages
- **miniconda2** for `%python.conda`
### Details
We already discussed about using alpine image in https://github.com/apache/zeppelin/pull/1761.
- However, it's not designed for desktop usage
- Doesn't have some official packages (R, ...)
- Not familiar to users for desktop OS
That the reason why ubuntu is used in base image
```
zeppelin base b3818f9ae4b1 11 hours ago 1.67 GB
zeppelin 0.6.2 c0a4d8556f92 7 hours ago 2.29 GB
zeppelin 0.7.0 c4a5ad0d04bd 8 hours ago 2.5 GB
zeppelin 0.7.1 54173b77743b 7 hours ago 2.49 GB
```
### What type of PR is it?
[Feature]
### Todos
* [x] - base image
* [x] - script for creating bin images
* [x] - bin image template
### What is the Jira issue?
[ZEPPELIN-1711](https://issues.apache.org/jira/browse/ZEPPELIN-1711)
### How should this be tested?
1. build base image `cd scripts/docker/zeppelin/base; docker build -t zeppelin:base ./`
2. build bin image `cd scripts/docker/zeppelin/0.7.1; docker build -t zeppelin:0.7.1 ./`
3. execute docker images
```
docker run -p 8080:8080 --rm --name zeppelin zeppelin:0.7.1
```
since it takes time to build, you can use already [published docker images](https://hub.docker.com/r/1ambda/docker-zeppelin/)
```
docker run -p 8080:8080 --rm --name zeppelin 1ambda/docker-zeppelin:0.7.1
```
4. should be able to run spark, python and R tutorials
### Screenshots (if appropriate)
NO
### Questions:
* Does the licenses files need update? - NO
* Is there breaking changes for older versions? - NO
* Does this needs documentation? - YES, updated
Author: 1ambda <1a...@gmail.com>
Closes #2264 from 1ambda/ZEPPELIN-1711/bin-dockerfile and squashes the following commits:
69a0b1f [1ambda] docs: Update docker.md
ced897f [1ambda] fix: DON'T remove /tmp
1f6da76 [1ambda] feat: Dockerfiles for 060, 070, 071
0fc3f75 [1ambda] feat: Add template for bin image
5cba56e [1ambda] feat: Use ubuntu for base image
Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/5c3291c7
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/5c3291c7
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/5c3291c7
Branch: refs/heads/master
Commit: 5c3291c71a8c3986f962fa3205577be109db9165
Parents: bba0a7b
Author: 1ambda <1a...@gmail.com>
Authored: Thu Apr 20 00:10:57 2017 +0900
Committer: Lee moon soo <mo...@apache.org>
Committed: Fri Apr 28 02:56:04 2017 -0700
----------------------------------------------------------------------
docs/install/docker.md | 43 ++++------
scripts/docker/zeppelin-base/Dockerfile | 42 ---------
scripts/docker/zeppelin/0.6.2/Dockerfile | 37 ++++++++
scripts/docker/zeppelin/0.7.0/Dockerfile | 37 ++++++++
scripts/docker/zeppelin/0.7.1/Dockerfile | 37 ++++++++
scripts/docker/zeppelin/base/Dockerfile | 90 ++++++++++++++++++++
scripts/docker/zeppelin/bin-template/Dockerfile | 37 ++++++++
scripts/docker/zeppelin/create-dockerfile.sh | 51 +++++++++++
8 files changed, 306 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/5c3291c7/docs/install/docker.md
----------------------------------------------------------------------
diff --git a/docs/install/docker.md b/docs/install/docker.md
index c7b6f69..40be416 100644
--- a/docs/install/docker.md
+++ b/docs/install/docker.md
@@ -27,44 +27,35 @@ limitations under the License.
This document contains instructions about making docker containers for Zeppelin. It mainly provides guidance into how to create, publish and run docker images for zeppelin releases.
## Quick Start
+
### Installing Docker
You need to [install docker](https://docs.docker.com/engine/installation/) on your machine.
-### Creating and Publishing Zeppelin docker image
-* In order to be able to create and/or publish an image, you need to set the **DockerHub** credentials `DOCKER_USERNAME, DOCKER_PASSWORD, DOCKER_EMAIL` variables as environment variables.
-
-* To create an image for some release use :
-`create_release.sh <release-version> <git-tag>`.
-* To publish the created image use :
-`publish_release.sh <release-version> <git-tag>`
-
-### Running a Zeppelin docker image
+### Running docker image
-* To start Zeppelin, you need to pull the zeppelin release image:
```
-docker pull ${DOCKER_USERNAME}/zeppelin-release:<release-version>
-
-docker run --rm -it -p 7077:7077 -p 8080:8080 ${DOCKER_USERNAME}/zeppelin-release:<release-version> -c bash
+docker run -p 8080:8080 --name zeppelin zeppelin:<release-version>
```
-* Then a docker container will start with a Zeppelin release on path :
-`/usr/local/zeppelin/`
-* Run zeppelin inside docker:
-```
-/usr/local/zeppelin/bin/zeppelin.sh
-```
+* Zeppelin will run at `http://localhost:8080`.
-* To Run Zeppelin in daemon mode
-Mounting logs and notebooks zeppelin to folders on your host machine
+If you want to specify `logs` and `notebook` dir,
```
-docker run -p 7077:7077 -p 8080:8080 --privileged=true -v $PWD/logs:/logs -v $PWD/notebook:/notebook \
--e ZEPPELIN_NOTEBOOK_DIR='/notebook' \
+docker run -p 8080:8080 \
+-v $PWD/logs:/logs \
+-v $PWD/notebook:/notebook \
-e ZEPPELIN_LOG_DIR='/logs' \
--d ${DOCKER_USERNAME}/zeppelin-release:<release-version> \
-/usr/local/zeppelin/bin/zeppelin.sh
+-e ZEPPELIN_NOTEBOOK_DIR='/notebook' \
+--name zeppelin zeppelin:<release-version> # e.g '0.7.1'
```
+### Building dockerfile locally
-* Zeppelin will run at `http://localhost:8080`.
+```
+cd $ZEPPELIN_HOME
+cd scripts/docker/zeppelin
+
+./create-dockerfile.sh <release-version> # e.g '0.7.1'
+```
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/5c3291c7/scripts/docker/zeppelin-base/Dockerfile
----------------------------------------------------------------------
diff --git a/scripts/docker/zeppelin-base/Dockerfile b/scripts/docker/zeppelin-base/Dockerfile
deleted file mode 100644
index 3084d3e..0000000
--- a/scripts/docker/zeppelin-base/Dockerfile
+++ /dev/null
@@ -1,42 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-FROM alpine:3.4
-MAINTAINER Apache Software Foundation <de...@zeppelin.apache.org>
-
-ENV JAVA_HOME /usr/lib/jvm/java-1.7-openjdk
-ENV PATH $PATH:$JAVA_HOME/bin
-
-RUN apk add --update bash curl openjdk7-jre wget ca-certificates python build-base make gcc g++ java-cacerts openssl && \
- rm /usr/lib/jvm/java-1.7-openjdk/jre/lib/security/cacerts && \
- ln -s /etc/ssl/certs/java/cacerts /usr/lib/jvm/java-1.7-openjdk/jre/lib/security/cacerts && \
- curl --silent \
- --location https://github.com/sgerrand/alpine-pkg-R/releases/download/3.3.1-r0/R-3.3.1-r0.apk --output /var/cache/apk/R-3.3.1-r0.apk && \
- apk add --update --allow-untrusted /var/cache/apk/R-3.3.1-r0.apk && \
- curl --silent \
- --location https://github.com/sgerrand/alpine-pkg-R/releases/download/3.3.1-r0/R-dev-3.3.1-r0.apk --output /var/cache/apk/R-dev-3.3.1-r0.apk && \
- apk add --update --allow-untrusted /var/cache/apk/R-dev-3.3.1-r0.apk && \
- R -e "install.packages('knitr', repos = 'http://cran.us.r-project.org')" && \
- apk del curl build-base make gcc g++ && \
- rm -rf /var/cache/apk/*
-
-RUN wget -O /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.1.3/dumb-init_1.1.3_amd64
-RUN chmod +x /usr/local/bin/dumb-init
-
-# ports for zeppelin
-EXPOSE 8080 7077
-
-ENTRYPOINT ["/usr/local/bin/dumb-init", "--"]
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/5c3291c7/scripts/docker/zeppelin/0.6.2/Dockerfile
----------------------------------------------------------------------
diff --git a/scripts/docker/zeppelin/0.6.2/Dockerfile b/scripts/docker/zeppelin/0.6.2/Dockerfile
new file mode 100644
index 0000000..26c3d59
--- /dev/null
+++ b/scripts/docker/zeppelin/0.6.2/Dockerfile
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM zeppelin:base
+MAINTAINER Apache Software Foundation <de...@zeppelin.apache.org>
+
+ENV Z_VERSION="0.6.2"
+ENV LOG_TAG="[ZEPPELIN_${Z_VERSION}]:" \
+ Z_HOME="/zeppelin"
+
+RUN echo "$LOG_TAG Download Zeppelin binary" && \
+ wget -O /tmp/zeppelin-${Z_VERSION}-bin-all.tgz http://archive.apache.org/dist/zeppelin/zeppelin-${Z_VERSION}/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ tar -zxvf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ rm -rf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ mv /zeppelin-${Z_VERSION}-bin-all ${Z_HOME}
+
+RUN echo "$LOG_TAG Cleanup" && \
+ apt-get autoclean && \
+ apt-get clean
+
+EXPOSE 8080
+
+WORKDIR ${Z_HOME}
+CMD ["bin/zeppelin.sh"]
+
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/5c3291c7/scripts/docker/zeppelin/0.7.0/Dockerfile
----------------------------------------------------------------------
diff --git a/scripts/docker/zeppelin/0.7.0/Dockerfile b/scripts/docker/zeppelin/0.7.0/Dockerfile
new file mode 100644
index 0000000..89b49f8
--- /dev/null
+++ b/scripts/docker/zeppelin/0.7.0/Dockerfile
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM zeppelin:base
+MAINTAINER Apache Software Foundation <de...@zeppelin.apache.org>
+
+ENV Z_VERSION="0.7.0"
+ENV LOG_TAG="[ZEPPELIN_${Z_VERSION}]:" \
+ Z_HOME="/zeppelin"
+
+RUN echo "$LOG_TAG Download Zeppelin binary" && \
+ wget -O /tmp/zeppelin-${Z_VERSION}-bin-all.tgz http://archive.apache.org/dist/zeppelin/zeppelin-${Z_VERSION}/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ tar -zxvf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ rm -rf /zeppelin-${Z_VERSION}-bin-all.tgz && \
+ mv /zeppelin-${Z_VERSION}-bin-all ${Z_HOME}
+
+RUN echo "$LOG_TAG Cleanup" && \
+ apt-get autoclean && \
+ apt-get clean
+
+EXPOSE 8080
+
+WORKDIR ${Z_HOME}
+CMD ["bin/zeppelin.sh"]
+
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/5c3291c7/scripts/docker/zeppelin/0.7.1/Dockerfile
----------------------------------------------------------------------
diff --git a/scripts/docker/zeppelin/0.7.1/Dockerfile b/scripts/docker/zeppelin/0.7.1/Dockerfile
new file mode 100644
index 0000000..989efa4
--- /dev/null
+++ b/scripts/docker/zeppelin/0.7.1/Dockerfile
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM zeppelin:base
+MAINTAINER Apache Software Foundation <de...@zeppelin.apache.org>
+
+ENV Z_VERSION="0.7.1"
+ENV LOG_TAG="[ZEPPELIN_${Z_VERSION}]:" \
+ Z_HOME="/zeppelin"
+
+RUN echo "$LOG_TAG Download Zeppelin binary" && \
+ wget -O /tmp/zeppelin-${Z_VERSION}-bin-all.tgz http://archive.apache.org/dist/zeppelin/zeppelin-${Z_VERSION}/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ tar -zxvf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ rm -rf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ mv /zeppelin-${Z_VERSION}-bin-all ${Z_HOME}
+
+RUN echo "$LOG_TAG Cleanup" && \
+ apt-get autoclean && \
+ apt-get clean
+
+EXPOSE 8080
+
+WORKDIR ${Z_HOME}
+CMD ["bin/zeppelin.sh"]
+
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/5c3291c7/scripts/docker/zeppelin/base/Dockerfile
----------------------------------------------------------------------
diff --git a/scripts/docker/zeppelin/base/Dockerfile b/scripts/docker/zeppelin/base/Dockerfile
new file mode 100644
index 0000000..8b6d2f9
--- /dev/null
+++ b/scripts/docker/zeppelin/base/Dockerfile
@@ -0,0 +1,90 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM ubuntu:16.04
+MAINTAINER Apache Software Foundation <de...@zeppelin.apache.org>
+
+ENV LOG_TAG="[ZEPPELIN_BASE]:" \
+ LANG=en_US.UTF-8 \
+ LC_ALL=en_US.UTF-8
+
+RUN echo "$LOG_TAG update and install basic packages" && \
+ apt-get -y update && \
+ apt-get install -y locales && \
+ locale-gen $LANG && \
+ apt-get install -y software-properties-common && \
+ apt -y autoclean && \
+ apt -y dist-upgrade && \
+ apt-get install -y build-essential
+
+RUN echo "$LOG_TAG install tini related packages" && \
+ apt-get install -y curl grep sed dpkg && \
+ TINI_VERSION=`curl https://github.com/krallin/tini/releases/latest | grep -o "/v.*\"" | sed 's:^..\(.*\).$:\1:'` && \
+ curl -L "https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini_${TINI_VERSION}.deb" > tini.deb && \
+ dpkg -i tini.deb && \
+ rm tini.deb
+
+ENV JAVA_HOME=/usr/lib/jvm/java-8-oracle
+RUN echo "$LOG_TAG Install java8" && \
+ echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
+ add-apt-repository -y ppa:webupd8team/java && \
+ apt-get -y update && \
+ apt-get install -y oracle-java8-installer && \
+ rm -rf /var/lib/apt/lists/* && \
+ rm -rf /var/cache/oracle-jdk8-installer
+
+# should install conda first before numpy, matploylib since pip and python will be installed by conda
+RUN echo "$LOG_TAG Install miniconda2 related packages" && \
+ apt-get -y update && \
+ apt-get install -y bzip2 ca-certificates \
+ libglib2.0-0 libxext6 libsm6 libxrender1 \
+ git mercurial subversion && \
+ echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && \
+ wget --quiet https://repo.continuum.io/miniconda/Miniconda2-4.3.11-Linux-x86_64.sh -O ~/miniconda.sh && \
+ /bin/bash ~/miniconda.sh -b -p /opt/conda && \
+ rm ~/miniconda.sh
+ENV PATH /opt/conda/bin:$PATH
+
+RUN echo "$LOG_TAG Install python related packages" && \
+ apt-get -y update && \
+ apt-get install -y python-dev python-pip && \
+ apt-get install -y gfortran && \
+ # numerical/algebra packages
+ apt-get install -y libblas-dev libatlas-dev liblapack-dev && \
+ # font, image for matplotlib
+ apt-get install -y libpng-dev libfreetype6-dev libxft-dev && \
+ # for tkinter
+ apt-get install -y python-tk libxml2-dev libxslt-dev zlib1g-dev && \
+ pip install numpy && \
+ pip install matplotlib
+
+RUN echo "$LOG_TAG Install R related packages" && \
+ echo "deb http://cran.rstudio.com/bin/linux/ubuntu xenial/" | tee -a /etc/apt/sources.list && \
+ gpg --keyserver keyserver.ubuntu.com --recv-key E084DAB9 && \
+ gpg -a --export E084DAB9 | apt-key add - && \
+ apt-get -y update && \
+ apt-get -y install r-base r-base-dev && \
+ R -e "install.packages('knitr', repos='http://cran.us.r-project.org')" && \
+ R -e "install.packages('ggplot2', repos='http://cran.us.r-project.org')" && \
+ R -e "install.packages('googleVis', repos='http://cran.us.r-project.org')" && \
+ R -e "install.packages('data.table', repos='http://cran.us.r-project.org')" && \
+ # for devtools, Rcpp
+ apt-get -y install libcurl4-gnutls-dev libssl-dev && \
+ R -e "install.packages('devtools', repos='http://cran.us.r-project.org')" && \
+ R -e "install.packages('Rcpp', repos='http://cran.us.r-project.org')" && \
+ Rscript -e "library('devtools'); library('Rcpp'); install_github('ramnathv/rCharts')"
+
+ENTRYPOINT [ "/usr/bin/tini", "--" ]
+CMD [ "/bin/bash" ]
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/5c3291c7/scripts/docker/zeppelin/bin-template/Dockerfile
----------------------------------------------------------------------
diff --git a/scripts/docker/zeppelin/bin-template/Dockerfile b/scripts/docker/zeppelin/bin-template/Dockerfile
new file mode 100644
index 0000000..95b3586
--- /dev/null
+++ b/scripts/docker/zeppelin/bin-template/Dockerfile
@@ -0,0 +1,37 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM zeppelin:base
+MAINTAINER Apache Software Foundation <de...@zeppelin.apache.org>
+
+ENV Z_VERSION="0.0.0"
+ENV LOG_TAG="[ZEPPELIN_${Z_VERSION}]:" \
+ Z_HOME="/zeppelin"
+
+RUN echo "$LOG_TAG Download Zeppelin binary" && \
+ wget -O /tmp/zeppelin-${Z_VERSION}-bin-all.tgz http://archive.apache.org/dist/zeppelin/zeppelin-${Z_VERSION}/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ tar -zxvf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ rm -rf /tmp/zeppelin-${Z_VERSION}-bin-all.tgz && \
+ mv /zeppelin-${Z_VERSION}-bin-all ${Z_HOME}
+
+RUN echo "$LOG_TAG Cleanup" && \
+ apt-get autoclean && \
+ apt-get clean
+
+EXPOSE 8080
+
+WORKDIR ${Z_HOME}
+CMD ["bin/zeppelin.sh"]
+
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/5c3291c7/scripts/docker/zeppelin/create-dockerfile.sh
----------------------------------------------------------------------
diff --git a/scripts/docker/zeppelin/create-dockerfile.sh b/scripts/docker/zeppelin/create-dockerfile.sh
new file mode 100755
index 0000000..8e1e06e
--- /dev/null
+++ b/scripts/docker/zeppelin/create-dockerfile.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+if [ $# -lt 1 ];
+then
+ echo "USAGE: $0 version"
+ echo "* version: 0.6.2 (released zeppelin binary version)"
+ exit 1
+fi
+
+TAG="[CREATE-DOCKERFILE]"
+VERSION=$1
+
+BASE_DIR="./base/"
+TEMPLATE_DOCKERFILE="./bin-template/Dockerfile"
+
+if [ ! -d "$BASE_DIR" ]; then
+ echo "${TAG} Base Directory doesn't exist: ${BASE_DIR}"
+ exit 1
+fi
+
+TARGET_DIR="${VERSION}"
+BASE_IMAGE_TAG="base"
+
+if [ ! -d "$TARGET_DIR" ]; then
+ echo "${TAG} Creating Directory: ${TARGET_DIR}"
+ mkdir -p ${TARGET_DIR}
+
+ echo "${TAG} Copying File: ${TARGET_DIR}/Dockerfile"
+ cp ${TEMPLATE_DOCKERFILE} ${TARGET_DIR}/Dockerfile
+
+ echo "${TAG} Set Version: ${VERSION}"
+ sed -i '' -e "s/Z_VERSION=\"0.0.0\"/Z_VERSION=\"${VERSION}\"/g" ${TARGET_DIR}/Dockerfile
+else
+ echo "${TAG} Directory already exists: ${TARGET_DIR}"
+fi