👋
JupyterLab in Docker for M1 Macで動かすJuliaとRCall
概要
- 今回,Docker for M1 Macで作ったJupyterLab環境でJuliaが動くようにしました.
- RCall.jlも動くようにしました.
- コンテナをbuildしたときの手順を残しています.
- Juliaのバージョン1.7.2がリリースされて,RCall.jl[1]が動くようになったことが作成のきっかけです.(1.7.1ではうまく動かなかった...)
全ファイルについては,以下をご確認ください.
前提知識
- 基本的なdockerコマンド, docker-composeコマンドの使い方
- JupyterLabの使い方
試行環境とファイル構成
- M1 MacBook Pro
- macOS Monterey 12.0.1
- Docker Desktop 4.4.2 (for Mac)
- ファイル構成
.
├── Dockerfile
├── docker-compose.yml
├── init.sh
└── packages.jl
手順
手順概要
- Dockerfileを作成する
- init.shを作成する
- docker-compose.ymlを作成する
- コンテナをbuildする
- JuliaとRCallをJupyterLabで試しに動かしてみる
1. Dockerfileを作成する
まずは,Dockerfile
を書いていきます.
Dockerfile
Dockerfile
FROM continuumio/anaconda3:latest
# 必要なパッケージを入れる.
RUN apt-get update && apt-get install -y --no-install-recommends \
fonts-ipaexfont \
libgl1-mesa-dev \
build-essential \
ca-certificates \
cmake \
gcc \
g++ \
openssh-client \
bash-completion \
vim \
software-properties-common \
dirmngr \
gnupg \
apt-transport-https \
ca-certificates
# Debianの設定
RUN apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
# RとRライブラリのインストール
RUN apt-get update && apt-get install -y r-base \
&& Rscript -e "install.packages(c('tidyverse', 'dplyr'), dependencies = TRUE, error = TRUE)"
# JuliaとJuliaのパッケージをインストール
WORKDIR /opt
ENV julia julia-1.7.2
COPY packages.jl /tmp/packages.jl
RUN wget https://julialang-s3.julialang.org/bin/linux/aarch64/1.7/${julia}-linux-aarch64.tar.gz \
&& tar zxvf ${julia}-linux-aarch64.tar.gz \
&& ln -s /opt/${julia}/bin/julia /usr/local/bin/julia \
&& julia /tmp/packages.jl \
&& rm ${julia}-linux-aarch64.tar.gz /tmp/packages.jl
RUN apt-get autoremove -y \
&& apt-get clean
WORKDIR /work
COPY init.sh /usr/bin
CMD ["/bin/bash", "/usr/bin/init.sh"]
-
apt-get install
でRのインストールに必要なものをインストールする
RUN apt-get update && apt-get install -y --no-install-recommends \
fonts-ipaexfont \
libgl1-mesa-dev \
build-essential \
ca-certificates \
cmake \
gcc \
g++ \
openssh-client \
bash-completion \
vim \
software-properties-common \
dirmngr \
gnupg \
apt-transport-https \
ca-certificates
- Rのインストールに必要なパッケージである,
software-properties-common
,dirmngr
,gnupg
,apt-transport-https
,ca-certificates
をインストールする
- RとRのライブラリをインストールする[2]
RUN apt-get update && apt-get install -y r-base \
&& Rscript -e "install.packages(c('tidyverse', 'dplyr'), dependencies = TRUE, error = TRUE)"
-
apt-get install
でr-base
をインストールする - RCallで使いたいRのライブラリを
Rscript
コマンドでインストールする
- JuliaとJuliaのパッケージをインストールする
WORKDIR /opt
ENV julia julia-1.7.2
COPY packages.jl /tmp/packages.jl
RUN wget https://julialang-s3.julialang.org/bin/linux/aarch64/1.7/${julia}-linux-aarch64.tar.gz \
&& tar zxvf ${julia}-linux-aarch64.tar.gz \
&& ln -s /opt/${julia}/bin/julia /usr/local/bin/julia
&& julia /tmp/packages.jl \
&& rm ${julia}-linux-aarch64.tar.gz /tmp/packages.jl
- バージョンを管理しやすいようにENVでjuliaのバージョンを記述しておく
- M1 Macなので
linux-aarch64
のURLを指定してwget
コマンドでダウンロードする
-
tar
コマンドでダウンロードしたファイルを解凍する -
ln -s
コマンドでjuliaのシンボリックリンクを貼る - Juliaで使いたいライブラリを
packages.jl
に記載しておいてjulia
コマンドでインストールする
packages.jl
packages.jl
using Pkg
Pkg.add([
"IJulia",
"PyCall",
"DataFrames",
"PyPlot",
"Distributions",
"ForwardDiff",
"Statistics",
"JuliaFormatter",
"RCall"
])
- init.shファイルをコピーして実行する
COPY init.sh /usr/bin
CMD ["/bin/bash", "/usr/bin/init.sh"]
2. init.shを作成する
JupyterLabを起動するためのコマンドを記載するinit.sh
ファイルを書いていきます.
init.sh
init.sh
#!/bin/bash
source /etc/bash_completion
jupyter lab --ip=0.0.0.0 --allow-root --LabApp.token=''
-
jupyter lab --ip=0.0.0.0 --allow-root --LabApp.token=''
でJupyterLabが立ち上がる
3. docker-compose.ymlを作成する
コンテナを立ち上げるのに必要なdocker-compose.yml
を書いていきます.
docker-compose.yml
docker-compose.yml
version: "3"
services:
notebook:
build:
context: .
dockerfile: Dockerfile
container_name: "jupyterlab"
ports:
- 8888:8888
restart: always
volumes:
- ./work:/work
4. コンテナをbuildする
Dockerコンテナをbuildできる環境もできたので,いよいよコンテナを立ち上げます.
$ docker-compose up -d --build
- 立ち上がったら,ブラウザで
localhost:8888
にアクセスしてJupyterLabがうまく起動できているか確認する
5. JuliaとRCallをJupyterLabで試しに動かしてみる
JupyterLabが立ち上がったので,実際にJuliaとRCallがうまく動くか確かめます.
- LauncherでJulia 1.7.2を選択する
- 実際にセルに
println("Hello World")
と書いてrunするとちゃんと返ってくる -
using RCall
で呼び出したあと,rcopy(R"1 + 1")
と書いてrunするとちゃんと返ってくる
参考
-
Introduction · RCall.jlをご確認ください. ↩︎
-
Debian Packages of R Softwareを参考にしてRのバージョン4.1.2をインストールしようとしましたが,うまくインストール出来ないです ↩︎
-
詳細を知りたい方は,M1 Mac で Docker を動かすための知識とノウハウをご確認ください. ↩︎
Discussion