【初心者】Windows11とDockerコンテナでRとMicrosoft R Openの実行環境を構築(練習)

2022-04-07

貨物列車のコンテナが写っている写真。

目的

Dockerコンテナ、何となく雰囲気はわかりますが、あまり触れる機会も無いので使ったことはありません。

今回、VirtualBoxとDockerコンテナを使って、Ubuntu Server上で動かす統計ソフト「R」と「Microsoft R Open」の実行速度がどの程度違うのかを確認することになりました。

Rが使えるコンテナイメージもあるようですが、せっかくなので(よく分からないので)1から手を動かした記録です。

手順

WSL2の有効化

Power Shellを管理者として実行(右クリックから)してコマンド入力。

wsl --install

結構待って、再起動。

Ubuntuが自動で立ち上がるので、ユーザー名とパスワードを入力。

Ubuntuがアプリに登録されました。

Docker Desktop on Windowsのインストール

DockerのサイトからWindows用インストーラをダウンロードします。

後は、インストーラに従って進めます。

インストール終了後はログアウトされるので、再度ログインすると承認画面が出てきます。

Acceptすると無事にインストール完了です。

コンテナを作ってみる

Dockerfileの作り方がわからないため、Ubuntuイメージからコンテナ作成 → 必要なプログラムのインストール → Rの実行と、普通のUbuntu Server構築のように進めました。

Docker Desktopからも作業ができそうな感じでしたが、Power Shellでポチポチとコマンドを叩きます。

Ubuntuのイメージ取得

Power Shellのコンソールから見よう見まねでコマンドを叩きます。

>docker pull ubuntu

バージョンを指定していないので、latest(現在は20.04)になります。

バージョンを変えたい場合(例:18.04)

>docker pull ubuntu:bionic

コンテナ作成とMROインストール・スクリプトの実行

コンテナを作成してログインします。その後、必要なプログラムをインストールします。

rootでログインになります。

>docker run -it ubuntu
//以下はコンテナ内
#apt update
//必要なプログラム・ライブラリのインストール
#apt install wget build-essential vim gfortran libtinfo5 libpangocairo-1.0-0
//MROのダウンロードインストール
#wget https://mran.blob.core.windows.net/install/mro/4.0.2/Ubuntu/microsoft-r-open-4.0.2.tar.gz
#tar -xf microsoft-r-open-4.0.2.tar.gz
#cd microsoft-r-open-4.0.2.tar.gz
#./install.sh
//途中で止まったりしたけど何度か繰り返したらインストール終了
//Rベンチマークスクリプトのダウンロード
#cd /
#wget http://r.research.att.com/benchmarks/R-benchmark-25.R
//ベンチマークスクリプトの修正(42行目) → 参考サイト
#vim R-benchmark-25.R
//Rコンソールの起動
#R
//以降はRコンソール
>install.packages("Matrix")
>install.packages("SuppDists")
>source("/R-benchmark-25.R")
//終了

//コンテナの反応が無くなった時の対応
//新しくPower Shellを起動
//コンテナ停止
>docker stop コンテナID
//コンテナ起動
>docker start コンテナID
//コンテナにログイン
>docker attach コンテナID

MROとは別のコンテナ作成と通常のRインストール・スクリプトの実行

こちらはaptでインストールできるのでスムーズに進みました。

>docker run -it ubuntu
//以下はコンテナ内
#apt update
//必要なプログラム・ライブラリのインストール
#apt install wget vim
//Rのダウンロードとインストール
#apt install r-base
//Rベンチマークスクリプトのダウンロード
#wget http://r.research.att.com/benchmarks/R-benchmark-25.R
//ベンチマークスクリプトの修正(42行目) → 参考サイト
#vim R-benchmark-25.R
//Rコンソールの起動
#R
//以降はRコンソール
>install.packages("SuppDists")
>source("/R-benchmark-25.R")
//終了

気づいたこと

  • コンテナでアプリやプログラムを分けて使うのがとても楽
  • この手順を記述しているのがDockerfileのような気がする
  • 共通している操作(今回の場合必要プログラムのインストール)まででコンテナをイメージにすれば良かった?
  • コンテナにはビルドしたバイナリだけの方がいい?(作法としては)開発環境を入れてもいい?

色々と気になる点は出てきましたが、少なくとも触る前よりはどんな使い方をするものかのイメージがわくようになりました。

もちろん上手な使い方にはまだまだ遠いですし、実際にShiny-Serverを動かすにはコンテナへの通信が必要になるため調べることは山ほどありますが、何となく1歩進めた気はします。