いろんなプログラミング言語をちょっとかじってみるのに便利かなと思って、Jupyter Lab のDocker イメージを作ってみた。
欲張ったせいで約10GB(圧縮して4GB)以上もあるイメージになってしまった。
TL;DR
- プログラミング言語の学習用にJupyter LabのDockerイメージを作った
- 17言語をサポートしている
-
docker-compose up
ですぐ使える -
linux/amd64
,linux/arm64
をサポート - イメージが大きくなってしまったので容量制限のない速いネットワークでPullしたほうがよい
サポートしている言語
サポートしている言語は次の通り。
Languages | Version | jupyter kernel |
---|---|---|
Python | 3.10.0 | IPython |
C#(.Net6) | 10.0 | .NET Interactive |
Elixir | 1.12.3 | ierl |
Erlang | OTP 24.0.4 | ierl |
F#(.Net6) | 6.0.9 | .NET Interactive |
Go | 1.19.1 | Gophernotes |
Java | 18.0.2.1 | Ganymede |
JavaScript(Node.js) | 18.8.0 | tslab |
Julia | 1.8.2 | IJulia |
Kotlin | 1.8.0 | jupyter-kotlin |
Powershell(.Net6) | 7.2.6 | .NET Interactive |
R | 4.1.3 | IRKernel |
Ruby | 3.1.2 | IRuby |
Rust | 1.64.0 | EvCxR Jupyter Kernel |
Scala | 2.13.8 | almond |
Sparql | SPARQL kernel | |
Typescript | 4.8.2 | tslab |
なるべく新しいバージョンが使えるようにした。
が、Jupyter kernelによってバージョンが固定されてしまう言語もあり、最新バージョンになってないものもある。
Pythonを学ぶ動機としては機械学習があると思うが、そういう用途には無料でGPUも利用できるColaboratoryを使うことをおすすめする。
このイメージはあくまで言語学習用途を想定している。
言語の追加・入れ替え
5.5.0 で.NETのC#、F#、Powershellを追加した。@mototoke さんPRありがとうございました。
4.0.0 では初めて言語の入替を行った。
3.2.0 までは Groovy をサポートしていたが、4.0.0で落とした。理由はJVM言語で使っていたJupyterカーネルBeakerXの利用をやめたため。Python3.8にアップデートしようとすると、BeakerXが動かず、共存できなかった。で、Pythonのアップデートを優先して、BeakerXを切った。
Java,Kotlin,Scalaについては他にカーネルがあったが、Groovyにはなかったので落とすことなった。
まあ、JVM言語の中ではマイナーだし(参考:Google Trend)、今後自分で使うことはないだろうと1。
代わりに、見聞きすることが増えてきたJuliaを追加した。
使い方
初回はDockerイメージをPullする。サイズが10GB弱もあるので容量制限のない速いネットワークでの作業をおすすめする2。
次のコマンドを実行すると、コンテナが起動する。
$ mkdir your/jupyter/project/dir
$ cd your/jupyter/project/dir
$ wget https://raw.githubusercontent.com/HeRoMo/jupyter-langs/master/docker-compose.yml
$ docker-compose up
コンテナが立ち上がったら http://localhost:8888/ にアクセスすると Jupyter Lab が開く
リポジトリ
作ったノートはgitで管理してリポジトリにプッシュしておくと、Webでいつでも参照できて便利。
GithubもGitlabもノートをjupyter同様にレンダリングしてくれる。
Gitlabのほうがレンダリングが圧倒的に速くてストレスが少ないのでおすすめ。
ただ、コードのシンタックスハイライトはGithubの方が見やすい。
あとがき
作るのに思ったより時間がかかってしまったので、それぞれの言語をローカルにインストールしたほうが早かったような気がする。
が、今後はこれでコンテナを起動するだけになるかな。
Dockerイメージのサイズが大きくなりすぎてしまっていたのを幾分改善でできたのは良かった。
メンテナンスしやすいように各言語のインストール処理を分けている状況では更に大きく減らすのは難しいな。。。