Binder IDE 开发 (Jupyter)

旧 java IDE 运行

旧的IDE是放在GitLab上的

题外话 为什么使用GitLab? GitHub GitLab都是基于git实现在线代码托管的仓库. 但GitHub上使用私人仓库是需要付费的,所以实验室开发的东西肯定不能公开,所以用GitLab,搭建了一个内网的环境,用来托管项目组的工程…

旧的IDE是用java编写的,我看学姐是用Eclipse打开的,我装的是IDEA…

打开后直接build,出现了很多错误,主要是:

1
2
3
Error:(10, 21) java: package javax.servlet does not exist

...

这一类的,查了一下,这个是Tomcat包含的库,所以应该安装Tomcat后就可以了吧?

安装和配置Tomcat的过程参考

https://blog.csdn.net/github_33304260/article/details/52496653

但是我执行 startup.sh后还是有个permission denied错误,在最后,

1
2
3
4
5
6
7
8
9
Dengs-MacBook-Pro% startup.sh
Using CATALINA_BASE: /Users/oliveds/Library/Tomcat
Using CATALINA_HOME: /Users/oliveds/Library/Tomcat
Using CATALINA_TMPDIR: /Users/oliveds/Library/Tomcat/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
Using CLASSPATH: /Users/oliveds/Library/Tomcat/bin/bootstrap.jar:/Users/oliveds/Library/Tomcat/bin/tomcat-juli.jar
touch: /Users/oliveds/Library/Tomcat/logs/catalina.out: Permission denied
Tomcat started.
/Users/oliveds/Library/Tomcat/bin/catalina.sh: line 482: /Users/oliveds/Library/Tomcat/logs/catalina.out: Permission denied

https://stackoverflow.com/questions/4672082/a-lots-of-permission-denied-in-catalina-out

这里的第二个回答说要把owner改成tomcat,但是我的电脑上没有这个user呀? 我看到要修改权限的那几个文件夹的属主本来就是我,权限都是drwxr-xr-x,于是我把权限改成了775,再次执行后错误解决了…(😌不知道这样做是否妥当?)

Binder

We are undergoing a dramatic increase in the complexity of techniques for analyzing data, doing scientific research, and sharing our work with others. In early 2016, the Binder project was announced, attempting to connect these three components.

Binder是一种开源服务,相当于Jupyter的接口,使用户能够在 web 浏览器中的 GitHub 上使用 Jupyter notebook,无需安装软件或任何编程库。所以我们现在的任务就是学习Binder的架构,利用Binder在我们自己的网页IDE上集成Jupyter.

以下内容均是基于Binder团队在SCIPy 2018 的演讲,视频链接:

https://www.youtube.com/watch?v=KcC0W5LP9GM&feature=youtu.be

Binder具有4个核心组件 (或者应该说主要是前三个吧):

  • repo2docker

    基于GitHub的repositories生成一个可复用的docker容器

    你需要将依赖文件写在repository的requirements.txt等文件中,Binder会自动搜索,自动建立image

  • JupyterHub

    创建用户Jupyter会话(/文档?)来运行这些容器?

    generates user sessions that serve these containers

  • BinderHub

    部署binder的工具,提供接口,让用户能够创建,使用,分享这些Jupyter会话(文档?)

  • mybinder.org

    将以上作为一个免费的服务提供出去? 通过这个网站提供BinderHub的服务(不止这一个网站,不过这个应该是Binder开发团队提供的那个,因为Binder是开源的,所以实际上所有组织和个人可以开发自己的私有的/企业局域的网站来实现Binder的功能.(我的任务是不是也是做一个这样的网站呢?)

    demonstrates the above as a free public service/tech demo

    用户在这个mybinder.org注册后,可以把自己的binder挂在这个网站上(可以分享给所有人来点击这个链接),然后别人就可以使用你的GitHub repository生成的容器,在Jupyter上查看和执行你的可执行代码文档.

repo2docker

实际上我们在使用一个别人分享的repositories的时候,也是需要根据里面的配置文件自己手动对计算机进行环境的配置,然后执行其中的代码. 那repo2docker就是自动化地完成了这一过程,将这个环境搭成一个docker image.

  1. git clone git@…

  2. Identigy requirements

    指定了规则需要写在哪些文件中,或者你也可以直接给出dockerfile

  3. Generate Dockerfile

    建立runtime environment,比如需要conda环境或者Julia runtime等等

    组装环境,安装需要的软件

  4. build (& push) docker

    生成docker image,用于后期运行,也可以将这个docker image分享出去

JpyterHub

在页面上建立notebook,运行docker image

Kubernetes是自动部署,扩展和管理容器化应用程序的开源系统,binder中使用了Kubernetes来辅助JupyterHub

BinderHub

运行在Kubernetes上,提供UI和web API(用户在这里指定自己想要建立的repo,填写参数,提交)

BinderHub对用户binder进行管理,①与repo2docker进行通信,实际建立用户请求的image;②与JupyterHub进行通信,实际为用户运行这个image(在JupyterHub上);③与用户端通信,用户通过浏览器与之交互?(不太确定)

mybinder.org

Binder 实例

https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python

这是Binder使用文档中给的一个实例,运行一下试试.

1
http://mybinder.org/repo/rlabbe/Kalman-and-Bayesian-Filters-in-Python

直接点击这个在mybinder.org上的链接,就会在网页上加载这个docker镜像,你的本机不需要搭建环境就可以直接使用Jupyter了(正常情况下需要安装python,Jupyter)

感觉确实是很好的学习工具~

BinderHub 源代码

https://github.com/jupyterhub/binderhub

就是这里了

它是用python3编写的程序,可以通过pip直接进行安装

1
pip install git+https://github.com/jupyterhub/binderhub

首先,BinderHub是基于Kubernetes(一个容器管理系统)搭建的,它拥有一个自己的镜像仓库,然后在运行时BinderHub会调用JupyterHub来运行Jupyter的服务,

0%