【Docker】気象・海象データ解析向けRstudio serverの構築

# はじめに

Dockerを用いて気象・海象データ解析向けのRstudio serverを構築します．

## 実行環境

OS:macOS Catalina version 10.15.3
docker: docker Desktop for Mac / Version 2.2.0.5 (43884) / Channel Stable

## Dockerイメージとライブラリ
DockerイメージにはGIS関連のRパッケージが充実している`rocker/geospatial`をチョイスし，これを基にして気象・海象データの代表的なファイル形式であるBUFR, GRIB1/2およびNetCDFをハンドリングするためのライブラリを併せて構築します．

- Dockerイメージ
 - [rocker/geospatial](https://hub.docker.com/r/rocker/geospatial)
- Dockerイメージの中で構築するもの
 - Rのパッケージ(data.table, lubridate，stars, metRなどお好みで)
 - [libecbufr](https://launchpad.net/libecbufr)：BUFRのハンドリング
 - [wgrib](https://www.cpc.ncep.noaa.gov/products/wesley/wgrib.html)：GRIB1のハンドリング
 - [wgrib2](https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/)：GRIB2のハンドリング
 - [ncl (NCAR command language)](https://www.ncl.ucar.edu)：GRIB1/2，HDF5，NetCDF等のハンドリング 
 - [cdo (climate data operators)](https://code.mpimet.mpg.de/projects/cdo/)：GRIB1/2，HDF5，NetCDF等のハンドリング


# 手順

任意のディレクトリ`~/Desktop/docker-compose/rstudio`に`docker-compose.yml`と`dockerfile`を作ります．

```zsh
% mkdir -p ~/Desktop/docker-compose/rstudio
% cd ~/Desktop/docker-compose/rstudio
% touch docker-compose.yml dockerfile
```

次に`docker-compose.yml`と`dockerfile`を編集します．

```yml:docker-compose.yml
version: '3'
services:
  server:
    build:
     context: .
     dockerfile: dockerfile
    volumes:
      - ".:/home/rstudio/work"
    ports:
      - "8787:8787"
    restart: always
    tty: true
    stdin_open: true
    environment:
      - ROOT=TRUE
      - USERID=rstudio
      - PASSWORD=PASSWORD 
```

イメージ内には`install.package`でRのパッケージ，`apt-get install`で`cdo`と`ncl`をインストールします．`libecbufr`については`dpkg`，`wgrib`と`wgrib2`については`make`（[こちら](https://qiita.com/KentoDodo/items/c8f1dc7fb902c07e817e)を参考にさせていただきました）でインストールをしています．

```dockerfile:dockerfile
# Docker image
FROM rocker/geospatial

# install R packages
RUN R -e "install.packages(c('data.table','lubridate', 'stars', 'metR'))"

# install libraries
RUN apt-get update
RUN apt-get install -y wget \
    build-essential \
    gfortran \
    zlib1g-dev \
    cdo \
    ncl-ncarg

ENV CC gcc
ENV FC gfortran

RUN cd ~ \
    && wget https://launchpad.net/libecbufr/0.8.7/0.8.7/+download/libecbufr_0.8.7_amd64_r335_bionic64.deb \
    && dpkg -i ./libecbufr_0.8.7_amd64_r335_bionic64.deb

RUN cd ~ \
    && mkdir wgrib \
    && cd ~/wgrib/ \
    && wget ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib/wgrib.tar \
    && tar xvf wgrib.tar \
    && make \
    && cp wgrib /usr/local/bin/wgrib

RUN cd ~ \
    && wget https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz \
    && tar xvzf wgrib2.tgz \
    && cd ~/grib2/ \
    && make \
    && cp wgrib2/wgrib2 /usr/local/bin/wgrib2
```

そして`~/Desktop/docker-compose/rstudio`で以下のコマンドを実行します．一連の処理が終了するまでしばらく時間がかかります．

```zsh
% cd ~/Desktop/docker-compose/rstudio
% docker-compose up -d --build
```

処理が終了するとコンテナが起動しています．

```zsh
% docker ps
CONTAINER ID  IMAGE          COMMAND  CREATED            STATUS             PORTS                   NAMES
XXXXXXXXXXXX  rstudio_server "/init"  About a minute ago Up About a minute  0.0.0.0:8787->8787/tcp   rstudio_server_1

```

上記のように表示されたことを確認し，ブラウザで`localhost:8787`を検索してRstudio serverが表示されていれば成功です．

![スクリーンショット 2020-04-07 19.58.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237116/2cb5dfd1-a5c6-fb91-e8f9-b9f2adebf0e8.png)

![スクリーンショット 2020-04-27 11.23.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237116/d09e6693-7b40-a739-d481-f5bc908d7dd5.png)