2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-26 21:41:59 +08:00
2024-03-17 15:50:34 +08:00
2024-03-17 15:40:43 +08:00

jupyter-image-stacks

如果您通过github访问本项目请注意

  1. github上的仓库是由源仓库推送的镜像仓库是一个镜像仓库
  2. 我们的源仓库是 https://eoelab.org:1031/build-image-stacks/jupyter-image-stacks
  3. 我们的docker镜像仓库是 https://hub.docker.com/r/ben0i0d/jupyter
  4. 对于issue/PR我们推荐在源仓库上提这对于我们工作更方便并且源仓库具有pipeline支持

项目梗概

目标预期

  1. 完整从基础系统开始项目内部完成依赖并实现一个CI文件用于自动化构建。
  2. 安全源代码与镜像构建公开化测试与工作场景是Rancher管理的私有K8S集群下的Jupyterhub,main分支Dockerfile均是经过测试而发布的
  3. 多样从现有的仓库代码开始从现有的kernel开始集成进入项目统一构建并完成汉化扩展配置镜像源等工作

如何使用

Docker

  • 没有数据持久化地使用:docker run -d -p 8888:8888 ben0i0d/jupyter:<tag>
  • 提供数据持久化地使用:docker run -d -p 8888:8888 -v "${PWD}":/home/jovyan ben0i0d/jupyter:<tag>

Jupyterhub
在singleuser内的profile指定镜像

- description: 提供Python的科学计算环境提供了丰富的数值计算、优化、信号处理、统计分析等功能用于科学研究和工程应用。
    display_name: Scipy
    kubespawner_override:
        image: eoelab.org:1032/build-image-stacks/jupyter-image-stacks/jupyter:scipy-c

全局说明

  1. 在终端下运行pip config set global.index-url https://mirrors.bfsu.edu.cn/pypi/web/simple完成pip换源
  2. 如果您有测试或者新需求,请构建一个新分支,在源仓库工作时请改动ci文件中tag字段避免覆盖如果自行构建或派生替换dockerfile中的基础镜像为dockerhub上的镜像
  3. 对于例如MathematicaMATLAB等商业软件我们只提供打包具体激活方式及可能带来的后果由用户承担
  4. 我们默认隐藏__pycache__,即在文件浏览器视图中不可见
  5. 对于ohmyzsh在terminal内只需执行以下代码一次即可
git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
  1. 以下代码适用于解决matplotlib绘图缺失中文字体
from matplotlib.font_manager import FontProperties
# 设置中文字体路径
zh_font = FontProperties(fname="/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc")
# 将中文字体设置为默认字体
plt.rcParams["font.family"] = zh_font.get_name()
  1. 以下代码适用于增加对conda虚拟目录的支持以实现自定义环境不丢失
    1. 数据持久化
      • docker启动时添加-v "DATA-VOLUME":/opt/conda/envs/
      • Jupyterhub添加额外挂载点到/opt/conda/envs/
    2. 虚拟环境安装内核
      • 使用conda create -n NAME *** ipykernel 创建这个虚拟环境。使用source activate NAME切换到这个虚拟环境并且添加一个kernel到本地的.jupyter目录,使用python -m ipykernel install --user --name NAME --display-name "DISPLAY-NAME"完成

当前构建镜像清单

  • Upstream: 镜像上游对标jupyter官方的minimal-notebook镜像
    • 说明
      1. 上游已经切换到debian:trixieGPU上游镜像也基于debian:trixie二次构建了镜像
      2. 默认情况下我们添加了eoelab.org的域名证书这不会带来安全问题
      3. 添加了sudo的无密码使用在安全要求较高的场景中不要允许特权提升
      4. 提供软件包SHELL(zsh),文件压缩/解压(.bz2|.zip|.7z),项目管理(git|git-lfs),证书管理(ca-certificates)编辑器vim,网络交互curl|wget,中文字体fonts-wqy-zenhei
  • LlinuxWith Desktop-GUI在无特权的情况下学习Linux系统提供Xfce桌面支持
  • Pyjo支持Python与Mojo通过将python语法与生态系统相结合进行生产与研究mojo具备元编程特性。我们期待这一环境带来的改进
    • 说明
      1. Mojo被合并进Python,由于网络原因需要手动执行modular install mojo && python /opt/modular/pkg/packages.modular.com_mojo/jupyter/manage_kernel.py install 完成添加kernel
    • Scipyjo提供Python的科学计算环境提供了丰富的数值计算、优化、信号处理、统计分析等功能用于科学研究和工程应用。
    • Scrpyjo: 提供Python的网页采取环境用于提取互联网上的数据实现自动化的信息收集和分析任务适用于数据挖掘、网络爬虫以及业务情报收集等应用场景。
    • Pyjospark: 提供基于Python的Spark编程接口用于大规模数据处理和分析提供了强大的并行计算能力和丰富的数据操作函数适合在分布式环境中进行高效的数据处理和机器学习任务。
    • Pyjoflink: 提供基于Python的Flink编程接口用于对无边界和有边界的数据流进行有状态的计算,也提供了批处理API用于基于流式计算引擎处理批量数据的计算能力。
    • PyjoaiWith GPU提供常用AI工具链提供了丰富的深度学习框架和NLP模型库使开发人员能够轻松构建和训练各种人工智能模型并应用于图像识别、自然语言处理等领域。
  • C: 支持C(versions ≥ C89),通用的编程语言,底层和高效,广泛应用于系统级开发和嵌入式设备。
  • CPP支持CPP11,14,17多范式的编程语言是C语言的扩展具备面向对象和泛型编程能力广泛应用于系统级开发和大规模软件项目。
  • Cadabra: 支持CadabraCadabra2一种基于符号计算的软件系统专门用于进行复杂代数计算和张量分析适合在理论物理学和相对论研究中使用。
  • Julia支持Julia高性能、动态的编程语言设计用于科学计算和数据分析具备类似Python的易读性和类似C的执行速度。
    • 说明:
      1. Julia镜像中的环境变量JULIA_NUM_THREADS,请在启动时根据理想的并发线程数进行配置
  • SciR支持R的科学计算环境面向统计分析和数据可视化的编程语言拥有丰富的数据处理库和强大的统计功能广泛应用于数据科学和研究领域。
    • Rspark: 提供基于R的Spark编程接口用于在Spark上运行R代码。提供了R语言在大数据处理和分布式环境中的能力可以进行高效的数据操作、机器学习和统计分析适用于大规模数据处理和分析任务。
  • Haskell: 支持Haskell纯函数式编程语言强调表达力和静态类型检查提供强大的模式匹配和高阶函数支持适用于函数式编程爱好者和学术研究。
  • Java: 支持Java面向对象的通用编程语言跨平台特性和庞大的生态系统广泛应用于企业级开发、移动应用程序和大型软件项目。
  • Kotlin: 支持Kotlin现代、静态类型的编程语言与Java互操作性良好提供更简洁、安全和高效的语法用于Android开发和跨平台应用程序。
  • JavaSript: 支持JavaSript一种广泛应用于网页开发的脚本语言用于实现交互性和动态效果也适用于服务器端开发和移动应用程序。
  • Go: 支持Go简洁、高效的编程语言注重并发和性能适用于构建可扩展的网络服务被广泛应用于云计算、分布式系统和网络编程领域。
  • Rust: 支持Rust安全、并发和高性能的系统级编程语言强调内存安全和线程安全适合开发高效且可靠的系统软件如操作系统、网络服务和嵌入式设备。
  • Fortran支持Fortran最早的高级编程语言之一用于科学计算和数值分析特别擅长处理大规模、复杂的数值计算问题在科学领域仍广泛使用。
  • Ansible: 支持Ansible开源的自动化工具用于配置管理、部署和编排任务在服务器管理和系统自动化方面广泛应用简化了复杂的IT操作流程。
  • Agda: 支持Agda依赖类型的函数式编程语言和交互式证明工具强调形式化验证和程序正确性在形式化方法和类型理论研究中广受欢迎。
  • APL (Dyalog): 支持APL (Dyalog)一种符号化的数组编程语言极具表达力和紧凑性适用于高维数据处理、数学建模和算法开发Dyalog是其中一种流行的实现版本。
  • Chapel: 支持Chapel用于高性能并行编程的并发编程语言旨在简化分布式计算和大规模数据处理具备易用性和可移植性适用于科学计算、并行算法和并行任务调度。
  • Lua: 支持Lua轻量级、嵌入式的脚本语言具有简洁的语法和快速的执行速度广泛应用于游戏开发、嵌入式系统和脚本扩展。
  • SQL: 支持SQL是一种用于管理和处理关系型数据库的语言。它是一个标准化的语言通常用于执行各种操作例如创建、修改和删除数据库中的表格以及检索、插入、更新和删除表格中的数据。在环境中提供duckdb数据库
  • Sagemath一个开源的数学计算系统结合了多个数学软件包提供了广泛的数学功能如数值计算、符号计算、离散数学和统计分析。它也是一个交互式计算环境方便进行数学建模、算法设计和学术研究。
  • Dotnet: 一个跨平台的开发框架支持C#、F#、PW用于构建各种类型的应用程序包括Web应用、桌面应用和移动应用。它提供了丰富的类库和工具简化了开发过程并具有高性能和可扩展性。
  • ScilabWith Desktop-GUI: 开源的数值计算软件适用于科学和工程领域中的数值分析、数据可视化、模拟和建模。它提供了丰富的数学函数和工具箱支持矩阵计算、符号计算和绘图功能是一个强大的数学工具尤其适用于教育和研究领域提供Xfce桌面支持包含APT可获取的全部插件。
  • Octave: 开源的数值计算软件类似于Matlab用于科学计算、数据分析和数值模拟。它提供了强大的矩阵运算、绘图功能以及丰富的数值分析函数是一个免费且便捷的工具适合进行数学建模、算法开发和教学任务包含APT可获取的全部插件。
  • Maple: 一个数学软件,透过智能文件界面提供强大数学引擎,可以轻松分析、探索、可视化和求解数学问题
    • 说明
      1. license.dat libmaple.so上传至主目录,每一次启动环境时,运行cp license.dat /opt/maple/license && cp libmaple.so /opt/maple/bin.X86_64_LINUX/完成激活再使用
  • Mathematica:一个科学计算软件,在数据分析、数学计算等领域提供了强大方便的使用功能。
    • 说明
      1. 每一次启动环境时,运行WolframKernel完成手动激活,激活码查看https://ibug.io/blog/2019/05/mathematica-keygen/,如果多次激活不成功,请运行rm /home/jovyan/.Mathematica/Licensing/mathpass删除之前的许可记录
  • MATLAB一种支持数据分析、算法开发和建模的编程和数值计算平台。
    • 说明
      1. license.lic libmwlmgrimpl.so上传至主目录,每一次启动环境时,运行cp license.lic /opt/matlab/r2023b/licenses/ && cp libmwlmgrimpl.so /opt/matlab/r2023b/bin/glnxa64/matlab_startup_plugins/lmgrimpl/完成激活再使用
    • minimal:仅仅包含Product:MATLAB
    • mcm:包含数学建模所需要的工具箱

插件清单

全局

  • jupyterlab-language-pack-zh-CN:对中文的支持
  • jupyterlab_tabnine用于自动补全、参数建议、函数文档查询、跳转定义

局部

镜像依赖关系

graph LR
BASE-->ENV{ENVIRONMENT}-->EA(Dotnet)
ENV-->EB(Llinux)
BASE-->PROGRAM{PROGRAMLANG}
PROGRAM-->PA(C)
PROGRAM-->PB(CPP)
PROGRAM-->PC(Julia)
PROGRAM-->PD(SciR)-->PDA(Rspark)
PROGRAM-->PE(Go)
PROGRAM-->PF(Rust)
PROGRAM-->PG(Java)
PROGRAM-->PH(Kotlin)
PROGRAM-->PI(JavaSript)
PROGRAM-->PJ(Raku:Perl6)
PROGRAM-->PK(Lua)
PROGRAM-->PL(Fortran)
PROGRAM-->PM(Ansible)
PROGRAM-->PN(Agda)
PROGRAM-->PO(APL:Dyalog)
PROGRAM-->PP(Cadabra)
PROGRAM-->PQ(Haskell)
PROGRAM-->PR(Pyjo)
PROGRAM-->PS(Q#)
PROGRAM-->PT(SQL)
PR-->PRA(Scipyjo)
PR-->PRB(Scrpyjo)
PRA-->PRAA(Pyjoai)  
PRA-->PRAB(Pyjospark)  
PRA-->PRAC(Pyjoflink)  
BASE-->MATH{MATH-TOOL}-->MA(Octave)
MATH-->MB(Scilab)
MATH-->MC(Sagemath)
MATH-->ME(Mathematica)
MATH-->MD(MATLAB)-->MDA(minimal)-->MDAA(mcm)

上游

软件包版本

  • cuda 12.2.0
  • Python 3.11
  • Julia 1.9.4
  • Java openjdk-17
  • kotlin(jre) openjdk-17-jre
  • Dotnet 7.0
  • spark 3.5.0
  • jupyterlab 4
  • Matlab R2023b
  • Mathematica 13.3.1
  • Maple 2023
  • Flink

镜像源

项目上游

jupyter团队项目 https://github.com/jupyter/docker-stacks

但是我们与上游差别较大包括源软件包本地化与扩展等因此如果您从本项目派生遇到问题请不要到jupyter团队提问这会加大他们的工作量

kernel

必要的版权说明

对于派生自其他团队的代码,我们在文件头添加了原版版权声明,我们保留并且支持其他开发团队版权

Description
Universal Jupyterlab Image stacks
Readme 308 KiB
Languages
Dockerfile 53%
Shell 33.8%
Python 13.2%