# JupyterLab + code-server + Julia

**URL:** <https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808>\
**Category:** Tooling\
**Tags:** jupyter, web, ide, vscode\
**Created:** [June 15, 2022, 12:25pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808 "2022-06-15T12:25:34Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [June 15, 2022, 12:25pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/1 "2022-06-15T12:25:34Z")

</div>

I have grown very fond of the combo JupyterLab + code-server + \<programming language\>.

You may test it at [https://demo.jupyter.b-data.ch/](https://demo.jupyter.b-data.ch/).  
 → Resources are limited to 2 cores and 8 GB RAM.

I am happy to receive feedback.

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [June 15, 2022, 12:28pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/2 "2022-06-15T12:28:50Z")

</div>

For Julia, it runs [registry.gitlab.b-data.ch/jupyterlab/julia/base](https://gitlab.b-data.ch/jupyterlab/julia/base/container_registry).  
 → A multi-arch (`linux/amd64`, `linux/arm64/v8`) docker image based on Debian including Julia, JupyterHub, JupyterLab, code-server (aka VS Code), Git, Git LFS, Pandoc, Zsh plus several popular VS Code extensions.

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [June 15, 2022, 12:36pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/3 "2022-06-15T12:36:48Z")

</div>

You may also run the image _locally_ with [Docker Desktop](https://www.docker.com/products/docker-desktop/):

**Initial command**

`docker run -it --rm -p 8888:8888 -v $PWD:/home/jovyan -e GEN_CERT=yes registry.gitlab.b-data.ch/jupyterlab/julia/base:1.7`

**Subsequent command**

`docker run -it --rm -p 8888:8888 -v $PWD:/home/jovyan registry.gitlab.b-data.ch/jupyterlab/julia/base:1.7 start-notebook.sh --NotebookApp.certfile=~/.local/share/jupyter/notebook.pem`

→ The initial command must be run in an empty directory so that the container can populate it. Then, visit `https://127.0.0.1:8888/lab?token=<token>` in a browser to load JupyterLab.

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [June 15, 2022, 12:49pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/4 "2022-06-15T12:49:08Z")

</div>

I find [Julia for Data Analysis \> Setting up your environment](https://github.com/bkamins/JuliaForDataAnalysis#julia-for-data-analysis) rather complicated.

You should be able to work through Bogumił Kamiński’s book [Julia for Data Analysis](https://www.manning.com/books/julia-for-data-analysis) just fine with both the Jupyter demo environment and docker image.

P.S.: The `linux/arm64/v8` image runs natively on Docker Desktop for Mac with Apple silicon.  
P.P.S.: The `RCall.jl` package does not compile successfully, because `R` is not included in the image.

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [June 15, 2022, 8:58pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/5 "2022-06-15T20:58:54Z")

</div>

Thank you for working on this!

---

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [June 15, 2022, 9:02pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/6 "2022-06-15T21:02:24Z")

</div>

Thank you. This is great.

I was just about to create a topic for creating a datascience Docker image that includes Python, R, and Julia. Is that something that could be achieved with your image?

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [June 15, 2022, 9:20pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/7 "2022-06-15T21:20:40Z")

</div>

> [@affans](#):
>
> I was just about to create a topic for creating a datascience Docker image that includes Python, R, and Julia.

There ist the official [jupyter/datascience-notebook](https://hub.docker.com/r/jupyter/datascience-notebook) image: [Selecting an Image — Docker Stacks documentation](https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-datascience-notebook)

---

<div class="post-metadata">

**Author:** ![affans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/affans/32/11911_2.png) [@affans](https://discourse.julialang.org/u/affans)\
**Post date:** [June 15, 2022, 9:25pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/8 "2022-06-15T21:25:32Z")

</div>

I was just working with that for the last two days but it seems to cause problems with Intel/M1 combos. I googled whether a Docker image can be multiple-architecture (so for example, using the native Python and Julia for ARM but using x86 compiled R)

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [June 15, 2022, 9:28pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/9 "2022-06-15T21:28:19Z")

</div>

> [@affans](#):
>
> Is that something that could be achieved with your image?

My images focus on one programming language per _docker stack_. With code-server as core application rather than JupyterLab.

There is [registry.gitlab.b-data.ch/jupyterlab/r/verse](https://gitlab.b-data.ch/jupyterlab/r/verse/container_registry) and [registry.gitlab.b-data.ch/jupyterlab/python/scipy](https://gitlab.b-data.ch/jupyterlab/python/scipy/container_registry).

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [June 17, 2022, 7:21am UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/10 "2022-06-17T07:21:52Z")

</div>

> [@affans](#):
>
> I googled whether a Docker image can be multiple-architecture (so for example, using the native Python and Julia for ARM but using x86 compiled R)

My images are multi-arch (`linux/amd64`, `linux/arm64/v8`) and work fine on both Intel and M1 Macs.

Images in multi-arch manifests are in fact separate images. Docker just pulls one image depending on your architecture.

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [June 17, 2022, 7:23am UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/11 "2022-06-17T07:23:30Z")

</div>

> [@benz0li](#):
>
> With code-server as core application rather than JupyterLab.

 ![JupyterLab](https://global.discourse-cdn.com/julialang/original/3X/f/6/f60ffe564104d305c9ddbf7caba26d2c0a422803.png)

 ![code-server](https://global.discourse-cdn.com/julialang/original/3X/b/f/bfed091ce7c3e486ce9d9bfa1cfbf6eff8a9cbfd.jpeg)

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [August 31, 2022, 8:22am UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/12 "2022-08-31T08:22:17Z")

</div>

There is also [registry.gitlab.b-data.ch/jupyterlab/julia/pubtools](https://gitlab.b-data.ch/jupyterlab/julia/pubtools/container_registry).  
👉 pubtools = base + [TinyTeX](https://yihui.org/tinytex/) + Pandoc + [Quarto](https://quarto.org)

ℹ Quarto is currently only available for `amd64` architecture.

Tag `latest` of both images has been updated to Julia v1.8.0.

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [January 16, 2023, 8:42am UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/13 "2023-01-16T08:42:50Z")

</div>

GPU accelerated images will be available soon. Stay tuned.

---

<div class="post-metadata">

**Author:** ![JordiBolibar](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jordibolibar/32/24307_2.png) [@JordiBolibar](https://discourse.julialang.org/u/JordiBolibar)\
**Post date:** [January 24, 2023, 10:30am UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/14 "2023-01-24T10:30:29Z")

</div>

Together with some colleagues at UC Berkeley we have been working for a while on very similar setup to this one. We’re using a JupyterHub with code-server with both Julia and Python. We’re running this with both CPUs and GPUs, often for very large machines (64 cores, 1TB). Everything is working really well, it’s pretty amazing being able to work like this from any machine around the world, with just a simple browser. This has been lead by Fernando Pérez (co-creator of Jupyter) and there are some really talented developers constantly improving it.

For more details you can check the repo here: [GitHub - pangeo-data/jupyter-earth: Jupyter meets the Earth: combining research use cases in geosciences with technical developments within the Jupyter and Pangeo ecosystems.](https://github.com/pangeo-data/jupyter-earth)

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [January 24, 2023, 10:59am UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/15 "2023-01-24T10:59:13Z")

</div>

The programming support for NVIDIA GPUs in Julia is provided by the [CUDA.jl](https://github.com/JuliaGPU/CUDA.jl) package. It does not require the entire CUDA toolkit installed [in the container], as it will automatically be downloaded when the package is first used.

If one has

- Docker
- NVIDIA GPU
- NVIDIA Linux driver
- NVIDIA Container Toolkit

installed, the images of the [JupyterLab Julia docker stack](https://github.com/b-data/jupyterlab-julia-docker-stack) are actually sufficient.

* * *

Nonetheless and since Python packages may require the CUDA toolkit: [CUDA-enabled JupyterLab Julia docker stack](https://github.com/b-data/jupyterlab-julia-docker-stack/blob/main/CUDA.md)

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [May 5, 2023, 6:54am UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/16 "2023-05-05T06:54:19Z")

</div>

The `latest` (v1.8.5) JupyterLab Julia images have been updated to Python 3.11 (v3.11.3)\[1\].

The JupyterLab Julia pubtools image now also provides Quarto (v1.3.340) for `arm64`.

👉 See the [Version Matrix](https://github.com/b-data/jupyterlab-julia-docker-stack/blob/main/VERSION_MATRIX.md) for detailed information.

* * *

1. ℹ The [latest Python version numba is compatible with](https://github.com/numba/numba/issues/8841) is chosen for these docker images.

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [May 12, 2023, 3:47pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/17 "2023-05-12T15:47:03Z")

</div>

The [JupyterLab Julia docker stack](https://github.com/b-data/jupyterlab-julia-docker-stack) has been updated to Julia v1.9.0.

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [May 21, 2023, 10:19am UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/18 "2023-05-21T10:19:07Z")

</div>

The [JupyterLab Julia docker stack](https://github.com/b-data/jupyterlab-julia-docker-stack) now provides [code-server](https://github.com/coder/code-server) v4.13.0 ([Code](https://github.com/microsoft/vscode) v1.78.2).

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [June 27, 2023, 10:35am UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/19 "2023-06-27T10:35:50Z")

</div>

Now also available as part of my Data Science Dev Containers:

> **[GitHub - b-data/data-science-devcontainers: (GPU accelerated) Multi-arch...](https://github.com/b-data/data-science-devcontainers)**
>
> (GPU accelerated) Multi-arch (linux/amd64, linux/arm64/v8) Data Science Dev Containers for R, Python and Julia - GitHub - b-data/data-science-devcontainers: (GPU accelerated) Multi-arch (linux/amd...

ℹ For [local use](https://code.visualstudio.com/docs/devcontainers/containers), on a [remote SSH host](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host) or with [GitHub Codespaces](https://docs.github.com/en/codespaces).

---

<div class="post-metadata">

**Author:** ![benz0li](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/benz0li/32/37040_2.png) [@benz0li](https://discourse.julialang.org/u/benz0li)\
**Post date:** [December 6, 2025, 3:57pm UTC](https://discourse.julialang.org/t/jupyterlab-code-server-julia/82808/20 "2025-12-06T15:57:10Z")

</div>

Base images for the stable releases (currently 1.12) have been updated:

- Regular (CPU only) images: [`debian:13`](https://hub.docker.com/_/debian)
- GPU accelerated images: [`ubuntu:24.04`](https://hub.docker.com/_/ubuntu)
