Skip to content

Multi-arch (linux/amd64, linux/arm64/v8) JupyterLab MAX/Mojo docker images. Please submit Pull Requests to the GitLab repository. Mirror of

License

Notifications You must be signed in to change notification settings

b-data/jupyterlab-mojo-docker-stack

Repository files navigation

JupyterLab MAX/Mojo docker stack

minimal-readme compliant Project Status: Active – The project has reached a stable, usable state and is being actively developed. Donate using Liberapay

Multi-arch (linux/amd64, linux/arm64/v8) docker images:

Images considered stable for Mojo versions ≥ 24.3.0.

🔬 Check out jupyterlab/mojo/scipy at https://demo.jupyter.b-data.ch.

Screenshot

Build chain

base → scipy

Features

  • JupyterLab: A web-based interactive development environment for Jupyter notebooks, code, and data. The images include
    • code-server: Code - OSS in the browser.
    • Git: A distributed version-control system for tracking changes in source code.
    • Git LFS: A Git extension for versioning large files.
    • MAX: A high-performance generative AI framework.
    • Mojo: A programming language for AI developers.
    • Neovim: Vim-fork focused on extensibility and usability. (24.4.0+)
    • Pandoc: A universal markup converter.
    • Python: An interpreted, object-oriented, high-level programming language with dynamic semantics.
    • Quarto: A scientific and technical publishing system built on Pandoc.
      ℹ️ scipy image
    • TinyTeX: A lightweight, cross-platform, portable, and easy-to-maintain LaTeX distribution based on TeX Live.
      ℹ️ scipy image
    • Zsh: A shell designed for interactive use, although it is also a powerful scripting language.

👉 See the Version Matrix for detailed information.

ℹ️ Regading Magic, see [(JupyterLab) MAX/Mojo docker stack] Why is Magic not installed?

The following extensions are pre-installed for code-server:

Subtags

  • {MOJO_VERSION,latest}-root: Container runs as root
  • {MOJO_VERSION,latest}-devtools: Includes the requirements according to
  • {MOJO_VERSION,latest}-devtools-root: The combination of both
  • {MOJO_VERSION,latest}-docker: Includes
    • docker-ce-cli
    • docker-buildx-plugin
    • docker-compose-plugin
    • docker-scan-plugin (amd64 only)
  • {MOJO_VERSION,latest}-docker-root: The combination of both
  • {MOJO_VERSION,latest}-devtools-docker: The combination of both
  • {MOJO_VERSION,latest}-devtools-docker-root: The combination of all three

ℹ️ See also Notes on subtag devtools.

Table of Contents

Prerequisites

This projects requires an installation of docker.

Install

To install docker, follow the instructions for your platform:

Usage

Build image (base)

latest:

cd base && docker build \
  --build-arg MOJO_VERSION=24.5.0 \
  --build-arg PYTHON_VERSION=3.12.7 \
  -t jupyterlab/mojo/base \
  -f latest.Dockerfile .

version:

cd base && docker build \
  -t jupyterlab/mojo/base:MAJOR.MINOR.PATCH \
  -f MAJOR.MINOR.PATCH.Dockerfile .

For MAJOR.MINOR.PATCH24.3.0.

Create home directory

Create an empty directory using docker:

docker run --rm \
  -v "${PWD}/jupyterlab-jovyan":/dummy \
  alpine chown 1000:100 /dummy

It will be bind mounted as the JupyterLab user's home directory and automatically populated.

Run container

self built:

docker run -it --rm \
  -p 8888:8888 \
  -u root \
  -v "${PWD}/jupyterlab-jovyan":/home/jovyan \
  -e NB_UID=$(id -u) \
  -e NB_GID=$(id -g) \
  jupyterlab/mojo/base[:MAJOR.MINOR.PATCH]

from the project's GitLab Container Registries:

docker run -it --rm \
  -p 8888:8888 \
  -u root \
  -v "${PWD}/jupyterlab-jovyan":/home/jovyan \
  -e NB_UID=$(id -u) \
  -e NB_GID=$(id -g) \
  IMAGE[:MAJOR[.MINOR[.PATCH]]]

IMAGE being one of

The use of the -v flag in the command mounts the empty directory on the host (${PWD}/jupyterlab-jovyan in the command) as /home/jovyan in the container.

-e NB_UID=$(id -u) -e NB_GID=$(id -g) instructs the startup script to switch the user ID and the primary group ID of ${NB_USER} to the user and group ID of the one executing the command.

The server logs appear in the terminal.

Using Podman (rootless mode)

Create an empty home directory:

mkdir "${PWD}/jupyterlab-root"

Use the following command to run the container as root:

podman run -it --rm \
  -p 8888:8888 \
  -u root \
  -v "${PWD}/jupyterlab-root":/home/root \
  -e NB_USER=root \
  -e NB_UID=0 \
  -e NB_GID=0 \
  -e NOTEBOOK_ARGS="--allow-root" \
  IMAGE[:MAJOR[.MINOR[.PATCH]]]

Using Docker Desktop

Creating a home directory might not be required. Also

docker run -it --rm \
  -p 8888:8888 \
  -v "${PWD}/jupyterlab-jovyan":/home/jovyan \
  IMAGE[:MAJOR[.MINOR[.PATCH]]]

might be sufficient.

Misc

marimo

To add a JupyterLab Launcher icon for marimo:

  1. Terminal: Install marimo and click

    pip install marimo click
  2. Terminal: Install jupyter-marimo-proxy

    pip install git+https://github.com/b-data/jupyter-marimo-proxy.git@jupyterlab-docker-stack
  3. Restart the container

Similar projects

What makes this project different:

  1. Multi-arch: linux/amd64, linux/arm64/v8
    ℹ️ Runs on Apple M series using Docker Desktop.
  2. Base image: Debian instead of Ubuntu
    ℹ️ Upcoming: CUDA-based images use Ubuntu.
  3. IDE: code-server next to JupyterLab
    ℹ️ code-server = Code - OSS in the browser.
  4. Just Python – no Conda / Mamba

See Notes for tweaks, settings, etc.

Contributing

PRs accepted. Please submit to the GitLab repository.

This project follows the Contributor Covenant Code of Conduct.

Support

Community support: Open a new discussion here. Commercial support: Contact b-data by email.

b-data tailors the JupyterLab images to your needs, e.g.

  • Integration of self-signed CA certificates to enable communication with web services on the intranet.
  • Setting up the necessary environment variables so that everything works behind a corporate proxy server.

Additionally, the JupyterHub setup can be customised to allow

  • authentication with AD/LDAP
  • mounting CIFS/SMB file shares

and much more.

License

Copyright © 2024 b-data GmbH

Distributed under the terms of the MIT License, with exceptions.