From 614135933b3c990253e593e1ca69c8a04708c3d9 Mon Sep 17 00:00:00 2001 From: Lee moon soo Date: Mon, 3 Aug 2020 15:36:59 -0700 Subject: [PATCH 1/7] add starod integration --- .staroid/README.md | 18 ++++++++++ .staroid/build.sh | 18 ++++++++++ .staroid/k8s.yaml | 76 ++++++++++++++++++++++++++++++++++++++++++ .staroid/minikube.yaml | 19 +++++++++++ .staroid/skaffold.yaml | 18 ++++++++++ .staroid/staroid.yaml | 35 +++++++++++++++++++ 6 files changed, 184 insertions(+) create mode 100644 .staroid/README.md create mode 100755 .staroid/build.sh create mode 100644 .staroid/k8s.yaml create mode 100644 .staroid/minikube.yaml create mode 100644 .staroid/skaffold.yaml create mode 100644 .staroid/staroid.yaml diff --git a/.staroid/README.md b/.staroid/README.md new file mode 100644 index 0000000..d60c611 --- /dev/null +++ b/.staroid/README.md @@ -0,0 +1,18 @@ +## gpu-jupyter on staroid + +This directory contains files to deploy gpu-jupyter project on [staroid](https://staroid.com). + +[![Run](https://staroid.com/api/run/button.svg)](https://staroid.com/api/run) + + +## Development + +Run locally with [skaffold](https://skaffold.dev) command. + +``` +$ git clone https://github.com/iot-salzburg/gpu-jupyter.git +$ cd gpu-jupyter +$ skaffold dev -f .staroid/skaffold.yaml --port-forward -p minikube +``` + +and browse `http://localhost:8888` diff --git a/.staroid/build.sh b/.staroid/build.sh new file mode 100755 index 0000000..0d8f9a5 --- /dev/null +++ b/.staroid/build.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# Custom builder script for Skaffold +# https://skaffold.dev/docs/pipeline-stages/builders/custom/ +# + +# generate Dockerfile +./generate-Dockerfile.sh -s --no-datascience-notebook --no-useful-packages +cd .build + +# print Dockerfile +cat Dockerfile + +# build +docker build -f Dockerfile -t $IMAGE . + +if $PUSH_IMAGE; then + docker push $IMAGE +fi diff --git a/.staroid/k8s.yaml b/.staroid/k8s.yaml new file mode 100644 index 0000000..25d7aee --- /dev/null +++ b/.staroid/k8s.yaml @@ -0,0 +1,76 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: jupyter-deployment +spec: + replicas: 1 + strategy: + type: "Recreate" + selector: + matchLabels: + app: jupyter + template: + metadata: + labels: + app: jupyter + pod.staroid.com/isolation: dedicated + pod.staroid.com/spot: "false" + pod.staroid.com/instance-type: gpu-1 + spec: + automountServiceAccountToken: true + securityContext: + runAsUser: 1000 # will be overrided by staroid + runAsGroup: 100 # writable directories are accessible with GID 100. see https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile + containers: + - name: jupyter + image: jupyter + command: + - "bash" + - "-c" + - >- + mkdir -p ~/.ssh && chmod 700 ~/.ssh && + echo -n "$(echo $MLFLOW_TRACKING_URI | sed 's/.*\(mlflow[^:]*\).*/\1/g') " >> ~/.ssh/known_hosts && + echo $MLFLOW_ARTIFACT_STORE_RSA_PUB | base64 --decode >> ~/.ssh/known_hosts && + echo $MLFLOW_ARTIFACT_STORE_RSA_PRI | base64 --decode >> ~/.ssh/id_rsa && + chmod 600 ~/.ssh/* && + jupyter-lab --ip='*' --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.allow_origin='*' + env: + - name: JUPYTER_ENABLE_LAB + value: "yes" + envFrom: + - configMapRef: + name: mlflow-env + volumeMounts: + - name: work-volume + mountPath: /home/jovyan/work + volumes: + - name: work-volume + persistentVolumeClaim: + claimName: work +--- +kind: Service +apiVersion: v1 +metadata: + name: jupyter +spec: + ports: + - name: http + port: 8888 + selector: + app: jupyter +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: work + annotations: + storage.staroid.com/scope: Instance + storage.staroid.com/file-manager: "1000:100" +spec: + storageClassName: nfs + accessModes: + - ReadWriteMany + volumeMode: Filesystem + resources: + requests: + storage: 1Gi diff --git a/.staroid/minikube.yaml b/.staroid/minikube.yaml new file mode 100644 index 0000000..c0c39ef --- /dev/null +++ b/.staroid/minikube.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jupyter-work-pv +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 1Gi + hostPath: + path: ./jupyter-work-pv +--- +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: nfs + labels: + addonmanager.kubernetes.io/mode: EnsureExists +provisioner: k8s.io/minikube-hostpath diff --git a/.staroid/skaffold.yaml b/.staroid/skaffold.yaml new file mode 100644 index 0000000..c251479 --- /dev/null +++ b/.staroid/skaffold.yaml @@ -0,0 +1,18 @@ +apiVersion: skaffold/v2beta1 +kind: Config +build: + artifacts: + - image: jupyter + context: . + custom: + buildCommand: .staroid/build.sh +deploy: + kubectl: + manifests: + - k8s.yaml +profiles: + - name: minikube + patches: + - op: add + path: /deploy/kubectl/manifests/0 + value: minikube.yaml diff --git a/.staroid/staroid.yaml b/.staroid/staroid.yaml new file mode 100644 index 0000000..121c0d1 --- /dev/null +++ b/.staroid/staroid.yaml @@ -0,0 +1,35 @@ +# See https://docs.staroid.com/references/staroid_yaml.html for more configuration detail +apiVersion: beta/v1 +starRank: + rate: 1.0 # set community rate here. https://staroid.com/site/starrank +build: + skaffold: {} +ingress: +- serviceName: jupyter + port: 8888 +deploy: + dependencies: + - project: open-datastudio/mlflow-server + level: OPTIONAL + paramGroups: + - name: Configurations + params: + - name: "Instance type" + description: "GPU instance is supported only in AWS for now" + type: STRING + defaultValue: gpu-1 + options: + - name: gpu-1 (8CPU, 61GB Mem, 1 GPU - Tesla V100 16GB Mem) + value: gpu-1 + paths: + - Deployment:jupyter-deployment:spec.template.metadata.labels["pod.staroid.com/instance-type"] + - name: "Spot instance" + type: STRING + defaultValue: "false" + options: + - name: "false" + value: "false" + - name: "true" + value: "true" + paths: + - Deployment:jupyter-deployment:spec.template.metadata.labels["pod.staroid.com/spot"] From e89d351621ffeec4293a10b0a7dda850464efafa Mon Sep 17 00:00:00 2001 From: Lee moon soo Date: Mon, 3 Aug 2020 15:48:11 -0700 Subject: [PATCH 2/7] locate skaffold file --- .build/Dockerfile | 142 ----------------------------------------- .staroid/skaffold.yaml | 4 +- .staroid/staroid.yaml | 3 +- 3 files changed, 4 insertions(+), 145 deletions(-) diff --git a/.build/Dockerfile b/.build/Dockerfile index fa03214..3622322 100755 --- a/.build/Dockerfile +++ b/.build/Dockerfile @@ -278,102 +278,6 @@ RUN MPLBACKEND=Agg python -c "import matplotlib.pyplot" && \ USER $NB_UID -WORKDIR $HOME - - ############################################################################ - ################ Dependency: jupyter/datascience-notebook ################## - ############################################################################ - -# Copyright (c) Jupyter Development Team. -# Distributed under the terms of the Modified BSD License. - -LABEL maintainer="Jupyter Project " - -# Set when building on Travis so that certain long-running build steps can -# be skipped to shorten build time. -ARG TEST_ONLY_BUILD - -# Fix DL4006 -SHELL ["/bin/bash", "-o", "pipefail", "-c"] - -USER root - -# R pre-requisites -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - fonts-dejavu \ - gfortran \ - gcc && \ - rm -rf /var/lib/apt/lists/* - -# Julia dependencies -# install Julia packages in /opt/julia instead of $HOME -ENV JULIA_DEPOT_PATH=/opt/julia -ENV JULIA_PKGDIR=/opt/julia -ENV JULIA_VERSION=1.4.1 - -WORKDIR /tmp - -# hadolint ignore=SC2046 -RUN mkdir "/opt/julia-${JULIA_VERSION}" && \ - wget -q https://julialang-s3.julialang.org/bin/linux/x64/$(echo "${JULIA_VERSION}" | cut -d. -f 1,2)"/julia-${JULIA_VERSION}-linux-x86_64.tar.gz" && \ - echo "fd6d8cadaed678174c3caefb92207a3b0e8da9f926af6703fb4d1e4e4f50610a *julia-${JULIA_VERSION}-linux-x86_64.tar.gz" | sha256sum -c - && \ - tar xzf "julia-${JULIA_VERSION}-linux-x86_64.tar.gz" -C "/opt/julia-${JULIA_VERSION}" --strip-components=1 && \ - rm "/tmp/julia-${JULIA_VERSION}-linux-x86_64.tar.gz" -RUN ln -fs /opt/julia-*/bin/julia /usr/local/bin/julia - -# Show Julia where conda libraries are \ -RUN mkdir /etc/julia && \ - echo "push!(Libdl.DL_LOAD_PATH, \"$CONDA_DIR/lib\")" >> /etc/julia/juliarc.jl && \ - # Create JULIA_PKGDIR \ - mkdir "${JULIA_PKGDIR}" && \ - chown "${NB_USER}" "${JULIA_PKGDIR}" && \ - fix-permissions "${JULIA_PKGDIR}" - -USER $NB_UID - -# R packages including IRKernel which gets installed globally. -RUN conda install --quiet --yes \ - 'r-base=3.6.3' \ - 'r-caret=6.0*' \ - 'r-crayon=1.3*' \ - 'r-devtools=2.3*' \ - 'r-forecast=8.12*' \ - 'r-hexbin=1.28*' \ - 'r-htmltools=0.4*' \ - 'r-htmlwidgets=1.5*' \ - 'r-irkernel=1.1*' \ - 'r-nycflights13=1.0*' \ - 'r-plyr=1.8*' \ - 'r-randomforest=4.6*' \ - 'r-rcurl=1.98*' \ - 'r-reshape2=1.4*' \ - 'r-rmarkdown=2.1*' \ - 'r-rsqlite=2.2*' \ - 'r-shiny=1.4*' \ - 'r-tidyverse=1.3*' \ - 'rpy2=3.1*' \ - && \ - conda clean --all -f -y && \ - fix-permissions "${CONDA_DIR}" && \ - fix-permissions "/home/${NB_USER}" - -# Add Julia packages. Only add HDF5 if this is not a test-only build since -# it takes roughly half the entire build time of all of the images on Travis -# to add this one package and often causes Travis to timeout. -# -# Install IJulia as jovyan and then move the kernelspec out -# to the system share location. Avoids problems with runtime UID change not -# taking effect properly on the .local folder in the jovyan home dir. -RUN julia -e 'import Pkg; Pkg.update()' && \ - (test $TEST_ONLY_BUILD || julia -e 'import Pkg; Pkg.add("HDF5")') && \ - julia -e "using Pkg; pkg\"add IJulia\"; pkg\"precompile\"" && \ - # move kernelspec out of home \ - mv "${HOME}/.local/share/jupyter/kernels/julia"* "${CONDA_DIR}/share/jupyter/kernels/" && \ - chmod -R go+rx "${CONDA_DIR}/share/jupyter" && \ - rm -rf "${HOME}/.local" && \ - fix-permissions "${JULIA_PKGDIR}" "${CONDA_DIR}/share/jupyter" - WORKDIR $HOME ############################################################################ @@ -409,51 +313,5 @@ RUN conda clean --all -f -y && \ fix-permissions $CONDA_DIR && \ fix-permissions /home/$NB_USER - ############################################################################ - ############################ Useful packages ############################### - ############################################################################ - -LABEL maintainer="Christoph Schranz " - -USER root - -# Install elasticsearch libs -USER root -RUN apt-get update \ - && curl -sL https://repo1.maven.org/maven2/org/elasticsearch/elasticsearch-hadoop/6.8.1/elasticsearch-hadoop-6.8.1.jar -RUN pip install --no-cache-dir elasticsearch==7.1.0 - -RUN pip install --no-cache-dir ipyleaflet plotly==4.8.* "ipywidgets>=7.5" - -# Install important packages and Graphviz -RUN set -ex \ - && buildDeps=' \ - graphviz==0.11 \ -' \ - && apt-get update \ - && apt-get -y install htop apt-utils graphviz libgraphviz-dev \ - && pip install --no-cache-dir $buildDeps - -# Install various extensions -RUN fix-permissions $CONDA_DIR -RUN jupyter labextension install @jupyterlab/github -RUN jupyter labextension install jupyterlab-drawio -RUN jupyter labextension install jupyter-leaflet -RUN jupyter labextension install jupyterlab-plotly@4.8.1 -RUN jupyter labextension install @jupyter-widgets/jupyterlab-manager -RUN pip install --no-cache-dir jupyter-tabnine==1.0.2 && \ - jupyter nbextension install --py jupyter_tabnine && \ - jupyter nbextension enable --py jupyter_tabnine && \ - jupyter serverextension enable --py jupyter_tabnine -RUN pip install --no-cache-dir jupyter_contrib_nbextensions \ - jupyter_nbextensions_configurator rise && \ - jupyter nbextension enable codefolding/main -RUN jupyter labextension install @ijmbarr/jupyterlab_spellchecker - -RUN fix-permissions /home/$NB_USER - -# Switch back to jovyan to avoid accidental container runs as root -USER $NB_UID - # Copy jupyter_notebook_config.json COPY jupyter_notebook_config.json /etc/jupyter/ diff --git a/.staroid/skaffold.yaml b/.staroid/skaffold.yaml index c251479..a54a56e 100644 --- a/.staroid/skaffold.yaml +++ b/.staroid/skaffold.yaml @@ -9,10 +9,10 @@ build: deploy: kubectl: manifests: - - k8s.yaml + - .staroid/k8s.yaml profiles: - name: minikube patches: - op: add path: /deploy/kubectl/manifests/0 - value: minikube.yaml + value: .staroid/minikube.yaml diff --git a/.staroid/staroid.yaml b/.staroid/staroid.yaml index 121c0d1..6500a20 100644 --- a/.staroid/staroid.yaml +++ b/.staroid/staroid.yaml @@ -3,7 +3,8 @@ apiVersion: beta/v1 starRank: rate: 1.0 # set community rate here. https://staroid.com/site/starrank build: - skaffold: {} + skaffold: + file: .staroid/skaffold.yaml ingress: - serviceName: jupyter port: 8888 From d14dbbee6d0bcb63b7a6af333f5802f126047296 Mon Sep 17 00:00:00 2001 From: Lee moon soo Date: Mon, 3 Aug 2020 16:38:32 -0700 Subject: [PATCH 3/7] remove mlflow --- .staroid/k8s.yaml | 8 -------- .staroid/staroid.yaml | 3 --- 2 files changed, 11 deletions(-) diff --git a/.staroid/k8s.yaml b/.staroid/k8s.yaml index 25d7aee..2afd690 100644 --- a/.staroid/k8s.yaml +++ b/.staroid/k8s.yaml @@ -28,18 +28,10 @@ spec: - "bash" - "-c" - >- - mkdir -p ~/.ssh && chmod 700 ~/.ssh && - echo -n "$(echo $MLFLOW_TRACKING_URI | sed 's/.*\(mlflow[^:]*\).*/\1/g') " >> ~/.ssh/known_hosts && - echo $MLFLOW_ARTIFACT_STORE_RSA_PUB | base64 --decode >> ~/.ssh/known_hosts && - echo $MLFLOW_ARTIFACT_STORE_RSA_PRI | base64 --decode >> ~/.ssh/id_rsa && - chmod 600 ~/.ssh/* && jupyter-lab --ip='*' --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.allow_origin='*' env: - name: JUPYTER_ENABLE_LAB value: "yes" - envFrom: - - configMapRef: - name: mlflow-env volumeMounts: - name: work-volume mountPath: /home/jovyan/work diff --git a/.staroid/staroid.yaml b/.staroid/staroid.yaml index 6500a20..5b76fae 100644 --- a/.staroid/staroid.yaml +++ b/.staroid/staroid.yaml @@ -9,9 +9,6 @@ ingress: - serviceName: jupyter port: 8888 deploy: - dependencies: - - project: open-datastudio/mlflow-server - level: OPTIONAL paramGroups: - name: Configurations params: From 393d7cf3d43c9227ba3db82c1addcaeed0860f51 Mon Sep 17 00:00:00 2001 From: Lee moon soo Date: Mon, 3 Aug 2020 17:44:20 -0700 Subject: [PATCH 4/7] install cudnn --- .staroid/Dockerfile.staroid | 1 + .staroid/build.sh | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 .staroid/Dockerfile.staroid diff --git a/.staroid/Dockerfile.staroid b/.staroid/Dockerfile.staroid new file mode 100644 index 0000000..b2aa97e --- /dev/null +++ b/.staroid/Dockerfile.staroid @@ -0,0 +1 @@ +RUN conda install cudnn=7.6.5 --yes diff --git a/.staroid/build.sh b/.staroid/build.sh index 0d8f9a5..4313787 100755 --- a/.staroid/build.sh +++ b/.staroid/build.sh @@ -7,6 +7,9 @@ ./generate-Dockerfile.sh -s --no-datascience-notebook --no-useful-packages cd .build +# apply staroid patch +cat ../Dockerfile.staroid >> Dockerfile + # print Dockerfile cat Dockerfile From f9e87fd677c05498aadb493064b065b65bfca35f Mon Sep 17 00:00:00 2001 From: Lee moon soo Date: Mon, 3 Aug 2020 18:35:04 -0700 Subject: [PATCH 5/7] correct path --- .staroid/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.staroid/build.sh b/.staroid/build.sh index 4313787..b3c8f80 100755 --- a/.staroid/build.sh +++ b/.staroid/build.sh @@ -8,7 +8,7 @@ cd .build # apply staroid patch -cat ../Dockerfile.staroid >> Dockerfile +cat ../.staroid/Dockerfile.staroid >> Dockerfile # print Dockerfile cat Dockerfile From 749f76975536e52222ccbd57999cbb5cd91e69b7 Mon Sep 17 00:00:00 2001 From: Lee moon soo Date: Wed, 5 Aug 2020 12:05:50 -0700 Subject: [PATCH 6/7] revert .build/Dockerfile to original --- .build/Dockerfile | 142 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) diff --git a/.build/Dockerfile b/.build/Dockerfile index 3622322..fa03214 100755 --- a/.build/Dockerfile +++ b/.build/Dockerfile @@ -278,6 +278,102 @@ RUN MPLBACKEND=Agg python -c "import matplotlib.pyplot" && \ USER $NB_UID +WORKDIR $HOME + + ############################################################################ + ################ Dependency: jupyter/datascience-notebook ################## + ############################################################################ + +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +LABEL maintainer="Jupyter Project " + +# Set when building on Travis so that certain long-running build steps can +# be skipped to shorten build time. +ARG TEST_ONLY_BUILD + +# Fix DL4006 +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +USER root + +# R pre-requisites +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + fonts-dejavu \ + gfortran \ + gcc && \ + rm -rf /var/lib/apt/lists/* + +# Julia dependencies +# install Julia packages in /opt/julia instead of $HOME +ENV JULIA_DEPOT_PATH=/opt/julia +ENV JULIA_PKGDIR=/opt/julia +ENV JULIA_VERSION=1.4.1 + +WORKDIR /tmp + +# hadolint ignore=SC2046 +RUN mkdir "/opt/julia-${JULIA_VERSION}" && \ + wget -q https://julialang-s3.julialang.org/bin/linux/x64/$(echo "${JULIA_VERSION}" | cut -d. -f 1,2)"/julia-${JULIA_VERSION}-linux-x86_64.tar.gz" && \ + echo "fd6d8cadaed678174c3caefb92207a3b0e8da9f926af6703fb4d1e4e4f50610a *julia-${JULIA_VERSION}-linux-x86_64.tar.gz" | sha256sum -c - && \ + tar xzf "julia-${JULIA_VERSION}-linux-x86_64.tar.gz" -C "/opt/julia-${JULIA_VERSION}" --strip-components=1 && \ + rm "/tmp/julia-${JULIA_VERSION}-linux-x86_64.tar.gz" +RUN ln -fs /opt/julia-*/bin/julia /usr/local/bin/julia + +# Show Julia where conda libraries are \ +RUN mkdir /etc/julia && \ + echo "push!(Libdl.DL_LOAD_PATH, \"$CONDA_DIR/lib\")" >> /etc/julia/juliarc.jl && \ + # Create JULIA_PKGDIR \ + mkdir "${JULIA_PKGDIR}" && \ + chown "${NB_USER}" "${JULIA_PKGDIR}" && \ + fix-permissions "${JULIA_PKGDIR}" + +USER $NB_UID + +# R packages including IRKernel which gets installed globally. +RUN conda install --quiet --yes \ + 'r-base=3.6.3' \ + 'r-caret=6.0*' \ + 'r-crayon=1.3*' \ + 'r-devtools=2.3*' \ + 'r-forecast=8.12*' \ + 'r-hexbin=1.28*' \ + 'r-htmltools=0.4*' \ + 'r-htmlwidgets=1.5*' \ + 'r-irkernel=1.1*' \ + 'r-nycflights13=1.0*' \ + 'r-plyr=1.8*' \ + 'r-randomforest=4.6*' \ + 'r-rcurl=1.98*' \ + 'r-reshape2=1.4*' \ + 'r-rmarkdown=2.1*' \ + 'r-rsqlite=2.2*' \ + 'r-shiny=1.4*' \ + 'r-tidyverse=1.3*' \ + 'rpy2=3.1*' \ + && \ + conda clean --all -f -y && \ + fix-permissions "${CONDA_DIR}" && \ + fix-permissions "/home/${NB_USER}" + +# Add Julia packages. Only add HDF5 if this is not a test-only build since +# it takes roughly half the entire build time of all of the images on Travis +# to add this one package and often causes Travis to timeout. +# +# Install IJulia as jovyan and then move the kernelspec out +# to the system share location. Avoids problems with runtime UID change not +# taking effect properly on the .local folder in the jovyan home dir. +RUN julia -e 'import Pkg; Pkg.update()' && \ + (test $TEST_ONLY_BUILD || julia -e 'import Pkg; Pkg.add("HDF5")') && \ + julia -e "using Pkg; pkg\"add IJulia\"; pkg\"precompile\"" && \ + # move kernelspec out of home \ + mv "${HOME}/.local/share/jupyter/kernels/julia"* "${CONDA_DIR}/share/jupyter/kernels/" && \ + chmod -R go+rx "${CONDA_DIR}/share/jupyter" && \ + rm -rf "${HOME}/.local" && \ + fix-permissions "${JULIA_PKGDIR}" "${CONDA_DIR}/share/jupyter" + WORKDIR $HOME ############################################################################ @@ -313,5 +409,51 @@ RUN conda clean --all -f -y && \ fix-permissions $CONDA_DIR && \ fix-permissions /home/$NB_USER + ############################################################################ + ############################ Useful packages ############################### + ############################################################################ + +LABEL maintainer="Christoph Schranz " + +USER root + +# Install elasticsearch libs +USER root +RUN apt-get update \ + && curl -sL https://repo1.maven.org/maven2/org/elasticsearch/elasticsearch-hadoop/6.8.1/elasticsearch-hadoop-6.8.1.jar +RUN pip install --no-cache-dir elasticsearch==7.1.0 + +RUN pip install --no-cache-dir ipyleaflet plotly==4.8.* "ipywidgets>=7.5" + +# Install important packages and Graphviz +RUN set -ex \ + && buildDeps=' \ + graphviz==0.11 \ +' \ + && apt-get update \ + && apt-get -y install htop apt-utils graphviz libgraphviz-dev \ + && pip install --no-cache-dir $buildDeps + +# Install various extensions +RUN fix-permissions $CONDA_DIR +RUN jupyter labextension install @jupyterlab/github +RUN jupyter labextension install jupyterlab-drawio +RUN jupyter labextension install jupyter-leaflet +RUN jupyter labextension install jupyterlab-plotly@4.8.1 +RUN jupyter labextension install @jupyter-widgets/jupyterlab-manager +RUN pip install --no-cache-dir jupyter-tabnine==1.0.2 && \ + jupyter nbextension install --py jupyter_tabnine && \ + jupyter nbextension enable --py jupyter_tabnine && \ + jupyter serverextension enable --py jupyter_tabnine +RUN pip install --no-cache-dir jupyter_contrib_nbextensions \ + jupyter_nbextensions_configurator rise && \ + jupyter nbextension enable codefolding/main +RUN jupyter labextension install @ijmbarr/jupyterlab_spellchecker + +RUN fix-permissions /home/$NB_USER + +# Switch back to jovyan to avoid accidental container runs as root +USER $NB_UID + # Copy jupyter_notebook_config.json COPY jupyter_notebook_config.json /etc/jupyter/ From 1a8f8a52cb63038d95b407e0a2f1ccc917bcd5b6 Mon Sep 17 00:00:00 2001 From: Lee moon soo Date: Wed, 5 Aug 2020 12:16:54 -0700 Subject: [PATCH 7/7] add more comments --- .staroid/k8s.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.staroid/k8s.yaml b/.staroid/k8s.yaml index 2afd690..a705a62 100644 --- a/.staroid/k8s.yaml +++ b/.staroid/k8s.yaml @@ -13,13 +13,13 @@ spec: metadata: labels: app: jupyter - pod.staroid.com/isolation: dedicated + pod.staroid.com/isolation: dedicated # see https://docs.staroid.com/ske/pod.html#pod for more available options pod.staroid.com/spot: "false" pod.staroid.com/instance-type: gpu-1 spec: automountServiceAccountToken: true securityContext: - runAsUser: 1000 # will be overrided by staroid + runAsUser: 1000 # staroid requires non-root container runAsGroup: 100 # writable directories are accessible with GID 100. see https://github.com/jupyter/docker-stacks/blob/master/base-notebook/Dockerfile containers: - name: jupyter @@ -56,8 +56,8 @@ kind: PersistentVolumeClaim metadata: name: work annotations: - storage.staroid.com/scope: Instance - storage.staroid.com/file-manager: "1000:100" + storage.staroid.com/scope: Instance # see https://docs.staroid.com/ske/storage.html for available scope + storage.staroid.com/file-manager: "1000:100" # of file manager pod. This will display file manager button on staroid management console spec: storageClassName: nfs accessModes: