diff --git a/docs/install/docker.md b/docs/install/docker.md index c7b6f699aad..40be416d421 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 `. -* To publish the created image use : -`publish_release.sh ` - -### 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: - -docker run --rm -it -p 7077:7077 -p 8080:8080 ${DOCKER_USERNAME}/zeppelin-release: -c bash +docker run -p 8080:8080 --name zeppelin zeppelin: ``` -* 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: \ -/usr/local/zeppelin/bin/zeppelin.sh +-e ZEPPELIN_NOTEBOOK_DIR='/notebook' \ +--name zeppelin zeppelin: # 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 # e.g '0.7.1' +``` diff --git a/scripts/docker/zeppelin-base/Dockerfile b/scripts/docker/zeppelin-base/Dockerfile deleted file mode 100644 index 3084d3e1a9c..00000000000 --- 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 - -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", "--"] diff --git a/scripts/docker/zeppelin/0.6.2/Dockerfile b/scripts/docker/zeppelin/0.6.2/Dockerfile new file mode 100644 index 00000000000..26c3d59054c --- /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 + +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"] + diff --git a/scripts/docker/zeppelin/0.7.0/Dockerfile b/scripts/docker/zeppelin/0.7.0/Dockerfile new file mode 100644 index 00000000000..89b49f8c979 --- /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 + +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"] + diff --git a/scripts/docker/zeppelin/0.7.1/Dockerfile b/scripts/docker/zeppelin/0.7.1/Dockerfile new file mode 100644 index 00000000000..989efa449e1 --- /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 + +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"] + diff --git a/scripts/docker/zeppelin/base/Dockerfile b/scripts/docker/zeppelin/base/Dockerfile new file mode 100644 index 00000000000..8b6d2f9459e --- /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 + +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" ] diff --git a/scripts/docker/zeppelin/bin-template/Dockerfile b/scripts/docker/zeppelin/bin-template/Dockerfile new file mode 100644 index 00000000000..95b3586a27d --- /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 + +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"] + diff --git a/scripts/docker/zeppelin/create-dockerfile.sh b/scripts/docker/zeppelin/create-dockerfile.sh new file mode 100755 index 00000000000..8e1e06ee638 --- /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