LoginSignup
2
1

More than 3 years have passed since last update.

Docker環境 Rstudio で文字化け回避、ファイルシステムの共有を行う(Docoker-composeも)

Last updated at Posted at 2020-11-01

文字化けとファイルシステム共有の問題

Docker Hubには、GISの分析も可能な Rstudio Server 環境として、rocker/geospatial があります。ただ、見よう真似で docker pull して、docker run rocker/geospatial を行っても、以下2点の問題がありました。

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

この2点に対処した内容を、覚書として残しておきます。

Dockerfile の作成

まず、Host(コンピュータ)側の任意の場所に、Dockerfileを作成します。今回はDropbox上にdockerという名前のディレクトリを作成してDockerfileを作ります。(例:(Mac) C:\Users\user\Dropbox\docker 、(Windows)D:\Dropbox\R\docker

メモ帳でもエディタでも良いので、Dockerfileという名前のファイルを作成し、docker のディレクトリ内に設置します。ディレクトリ内には Dockerfile 以外のファイルは原則置かないようにしてください(Docker build の際に影響します。)。RUNごとにimageが作成されてしまうので、なるべく RUN は バックスラッシュ \ で繋げて書くのが望ましいとされます。12

# ベースとするイメージ(任意の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-cjk

Docker build

(Macなら)Terminalを起動。Windowsであれば TeraTermやWindows Terminalを使用してください。Dockerfile がおいてある場所に移動します。

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

cd Dropbox
cd docker

Dockerfileがおいてある場所に移動したら、docker build -t <name> <directory> で、buildします。(今回は<name>geo:geospatialとします)

# /Users/user/Dropbox/docker

docker build -t geo:geospatial .

build後、Docker runをしますが、 -v オプションでファイルシステムを共有し、-p オプションでHostとContainerのポートを繋げます。3

Macの場合

docker run -p 8787:8787 -v C:\Users\user\Dropbox\R\:/home/rstudio -d geo:geospatial

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

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

docker run -p 8787:8787 -v D:\Dropbox\R:/home/rstudio -d geo:geospatial

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

また、Windowsの場合は、Virtual Hard DiskをDドライブに設定しておいたほうが良さそうです。5

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

上記のコマンドを入力して、エラーが出なければ、無事にRStudioが起動できています。http://localhost:8787 で確認してみてください。今回はパスワードを任意のものに設定しなかったため、Username、Passwordともに、rstudioでログイン出来ると思います。

(おまけ)Docker-composeの活用

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

docker-compose.yml を作成する

Dockerfileと同じ場所に、docker-compose.yml というファイルを作成し、エディタで編集をしていきます。上記と同じように Dropbox > docker 上で作業をします。(例:(Mac) C:\Users\user\Dropbox\docker 、(Windows)D:\Dropbox\R\docker

上記では、docker builddocker run の際に

docker build -t geo:geospatial .
docker run -p 8787:8787 -v C:\Users\user\Dropbox\R\:/home/rstudio -d geo:geospatial

と書きましたが、これを docker-compose.yml 上で設定すると、下記のようになります。

version: '3'

services:
  rstudio:
    build: .
    image: geo:geospatial
    container_name: geo
    ports:
      - 8787:8787
    volumes:
      - ../R:/home/rstudio
    tty: true
    stdin_open: true

それぞれコロン(:)やダッシュ(-)のあとには半角スペースを入れるのを忘れないようにしてください。例えば、version: '3'は、version:'3'の間に半角スペースがあります。build: .などもコンマ(.)の前に半角スペースが必要です。これは書式のルールとして従ってください。

また、今回はvolumesは相対パスで指定しています。C:\Users\user\Dropbox\R というフォルダをRstudioのホームディレクトリに指定したい場合は、今 C:\Users\user\Dropbox\docker というフォルダにいるので、.. でひとつ上の階層にあがり(C:\Users\user\Dropbox\)、それから /R のディレクトリを指定しています。

相対パスを指定することで、使っているマシンの環境に依存しないコードになりました。これで MacでもWindowsでも同じdocker-compose.yml ファイルで管理が可能になりました。

docker-compose up -d でbuildする

Dockerの際と一緒です。(Macなら)Terminalを起動。Windowsであれば TeraTermやWindows Terminalを使用してください。Dockerfileおよびdocker-compose.ymlがおいてある場所に移動します。

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

cd Dropbox
cd docker

Dockerfileおよびdocker-compose.yml がおいてある場所に移動したら、今回はdocker builddocker runの代わりにdocker-compose up -dと入力・実行します。これだけです。

# /Users/user/Dropbox/docker

docker-compose up -d

エラーが出る場合は、先程の半角スペースを入れ忘れていないか、まずは確認してみてください。問題なければ http://localhost:8787 で前回の設定と同じように無事にrstudioに接続できると思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1