Docker環境 Rstudio で文字化け回避、Host/Container間のファイルシステムの共有に関する覚書

目次
  1. Dockerfile の作成
  2. Docker build
  3. ブラウザからRstudioへアクセス
  4. 追記:Docker-composeによる管理方法

今まで、データ分析にはデスクトップ版のRstudioを使っていたのですが、最近Docker環境下のRstudio Serverに移行しました。自宅と職場でMac、Windows両方のマシンを使っていたので、Docker上で(特に文字エンコードなど)同じ環境を構築してデータ分析ができるようになり、とても快適です。

これまでデスクトップ版で使用していた Rstudioを Docker の RStudio Server に移行。個人的にはOS アップデートなどからくる不具合の煩わしさがなくなるのが大きい。Docker から他の Python コンテナなども気軽に使えるのが良い。

— Shoei (@shoei05) June 30, 2020

Docker HubにはGISの分析も可能なRstudio Server環境として、rocker/geospatial((rocker/geospatial. Accessed February 21, 2021. https://hub.docker.com/r/rocker/geospatial)) があります。ただ、見よう見真似で docker pull して、docker run rocker/geospatial を行っても、以下2点の問題がありました。

  1. ggplot2 などでplotした図が日本語に対応していない(文字化けしてしまう。)
  2. Host/Container間のファイルシステムを共有していないと、いつもデスクトップ版で使用していたファイルにアクセスできない。(Docker runの際に設定をしておかないと、立ち上げてから setwd しようとしてもできない。)

この2点に対処した内容を、覚書として残しておきます。なお、Dockerについては、米国データサイエンティストのかめれおんさんのDocker講座((米国AI開発者がゼロから教えるDocker講座. Udemy. Accessed February 21, 2021. https://www.udemy.com/course/aidocker/))で詳しく、わかりやすく理解することができました。無料のブログ記事((Docker超入門①〜Dockerってなに?〜【初心者向け】. Accessed February 21, 2021. https://datawokagaku.com/whatisdocker/))もあるので、参照をおすすめします。上記の講座の知識を前提条件に以下の内容を記載していきます。

Docker環境のRstudio(rocker/geospatial)文字化け回避について覚書。ここ(https://t.co/RdwekV29Uu )を参考にDockerfileを作成。かめさんの動画(https://t.co/6P5ZP3nl7V )を参考に、docker build -t <name> <directory>でイメージを作成。https://t.co/aEcmG7aIH7 で永続化&コンテナ起動

— Shoei (@shoei05) July 25, 2020

Dockerfile の作成

まず、Host(コンピュータ)側の任意の場所に、Dockerfile((Docker超入門⑤〜Dockerfileを使う〜【初心者向け】. Accessed February 21, 2021. https://datawokagaku.com/howtousedockerfile/))を作成します。今回はDropbox上にdockerという名前のディレクトリを作成してDockerfileを作ります。(例:(Mac) /Users/user/Dropbox/docker 、(Windows)D:\Dropbox\R\docker)

メモ帳でもエディタでも良いので、Dockerfileという名前のファイルを作成し、docker のディレクトリ内に設置します。ディレクトリ内には Dockerfile以外のファイルは原則置かないようにしてください(Docker build の際に影響します。)

こちら((RStudio Serverのインストール. Accessed February 21, 2021. https://k-metrics.github.io/cabinet/env_install_svr.html))を参考にDockerfileを作成しました。RUNごとにimageが作成されてしまう((Docker超入門⑦〜よく使うDockerfileコマンド一覧〜【初心者向け】. Accessed February 21, 2021. https://datawokagaku.com/dockerfile_commands/))ので、なるべく RUN は バックスラッシュ \ で繋げて書くのが望ましいとされます。

# ベースとするイメージ(任意のrocker/*に変更可能)
FROM rocker/geospatial:latest

# OS環境(rockerはdebianベース)に日本語ロケールを追加し切り替え
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN sed -i '$d' /etc/locale.gen \
  && echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen \
    && locale-gen ja_JP.UTF-8 \
    && /usr/sbin/update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
RUN /bin/bash -c "source /etc/default/locale"
RUN ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# 日本語フォントをインストール
RUN apt-get update && apt-get install -y \
  fonts-ipaexfont \
  fonts-noto-cjkCode language: PHP (php)

Docker build

(Macなら)TerminalでSSH接続。Windowsであれば TeraTerm((株式会社インプレス. 窓の杜. 窓の杜. Accessed February 21, 2021. https://forest.watch.impress.co.jp/library/software/utf8teraterm/))やWindows Terminal((ついに完成「Windows Terminal」の機能と使い方まとめ. @IT. Accessed February 21, 2021. https://www.atmarkit.co.jp/ait/articles/2005/28/news018.html))を使用してください。Linuxの基礎コマンドは、こちら((dotinstall. 【旧版】UNIXコマンド入門 [一般ユーザー編] (全24回). ドットインストール. Accessed February 21, 2021. https://dotinstall.com/lessons/basic_unix_v2))が動画で解説してくれて丁寧です。かめれおんさんのDocker講座((米国AI開発者がゼロから教えるDocker講座. Udemy. Accessed February 21, 2021. https://www.udemy.com/course/aidocker/))の中でも基礎コマンドについて解説してくれています。

# 自分(Mac)の場合 /Users/user から /Users/user/Dropbox/docker へ移動

cd Dropbox
cd dockerCode language: PHP (php)
# /Users/user/Dropbox/docker

docker build -t geo:geospatial .Code language: PHP (php)

build後、Docker runをしますが、 -v オプションでファイルシステムを共有し、-p オプションでHostとContainerのポートを繋げます。こちらの記事も参考にしました。

Macの場合

docker run -p 8787:8787 -v C:\Users\user\Dropbox\R\:/home/rstudio -d geo:geospatialCode language: JavaScript (javascript)

C:\Users\user\Dropbox\R\ はそれぞれご自身が使用している任意のフォルダパスを入力してください。

WindowsでDドライブを使用している場合

docker run -p 8787:8787 -v D:\Dropbox\R:/home/rstudio -d geo:geospatialCode language: JavaScript (javascript)

などとなると思いますが、Dドライブ上のディレクトリでうまくマウントできない場合は、ローカルセキュリティポリシーの設定を確認してください。

WindowsでDockerを設定する際にローカルディレクトリがマウントできない場合:Dockerのネットワークが識別されていないネットワークとなっているため、ローカルセキュリティポリシーを設定 https://t.co/JKmiaSXa2Q

— Shoei (@shoei05) August 13, 2020

また、Windowsの場合は、Virtual Hard DiskをDドライブに設定しておいたほうが良さそうです((Wand_ta. Docker for Windowsを使っていてCドライブが枯渇したときの対処. 勉強日記. Published 1544067149. Accessed February 21, 2021. https://wand-ta.hatenablog.com/entry/2018/12/06/123229))。

ブラウザからRstudioへアクセス

上記のコマンドを入力して、エラーが出なければ、無事にRStudioが起動できています。http://localhost:8787 で確認してみてください。今回はパスワードを任意のものに設定しなかったため、C:\Users\user\Dropbox\R\ はそれぞれご自身が使用している任意のフォルダパスを入力してください。

追記:Docker-composeによる管理方法

Docker-composeを使ってRstudioを管理することもできます。上記記事のままでも問題ないのですが、Docker run する際に、毎回長いコードを書くのも、覚えるのも大変です。また、将来的に RStudio Server 以外にも色々なコンテナを併用したい場合がでてくるかもしれません。そのようなときは Docker-compose が役に立ちます。下記の記事をご参照ください。

https://plaza.umin.ac.jp/shoei05/wp/index.php/2020/10/30/196/
この記事は旧サイト(UMIN)から移行したものです。内容は記載の公開・更新時点のものです。