Ubuntu
docker
docker-compose
wgrib2

wgrib2をDockerコンテナにインストールした話

More than 1 year has passed since last update.

概要

こんにちわ。Weathernews 新入社員の 百々 です。
たまに社内でトドと呼ばれますが、ドドです。本名です。本当です。

今回は、気象データを扱うためのコマンドツール wgrib2 をDockerコンテナで動かしてみます。

wgrib2とは

wgrib2は、WMO(世界気象機関)で定めている気象データ形式GRIB2を使用するためのコマンドツール。
作成は、アメリカのNOAAが行なっており、直近の更新は2017年2月となっている。(※2017年6月現在)
(参考 http://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/)

なお、GRIB2形式データは、主に数値予報モデルなどで使用されている。

背景

wgrib2を扱う需要が高いので、環境依存をなくすため、これをDocker化したかった。

きっかけは、wgrib2のインストールではmakefileの中身をOSなどの環境ごとに変更しなければならず、インストールでトラブルが発生したことから始まった。

makefileの変更は、多くの場合はコメントアウトの付け外しではある。が、ヒューマンエラーや微妙なローカル環境の違いにより、makeで長い時間待たされた挙句エラーを発生😡させてしまうので、Dockerさえ入っていればコマンド一発でインストールできるようにしたかった。

wgrib2をUbuntuベースのDockerコンテナへインストールする

dockerfileにインストール手順を記載してdockerコンテナを作成して、実現した。

Dockerfile

Dockerfile
FROM ubuntu:latest

# Install libraries for installing wgrib2
RUN apt-get update && apt-get install -y wget \
    build-essential \
    gfortran \
    zlib1g-dev

# Setting for libraries
ENV CC gcc
ENV FC gfortran

# Download wgrib2
RUN cd ~ \
    && wget ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz \
    && tar xvzf wgrib2.tgz

# Install wgrib2
RUN cd ~/grib2/ \
    && make \
    && cp wgrib2/wgrib2 /usr/local/bin/wgrib2

解説

Ubuntuにwgrib2をインストールするためには、gccgfortran及びzlib1g-devがいるので、これらをapt-getを使ってインストールする。
gccは、build-essentialパッケージに同包されているものを使用する。

wgrib2のmakefileには、どのコンパイラを使用するかを環境変数CC及びFCから選択する。よって、これらをENVを使用して定義しておく。

後は、wgrib2をダウンロードしてインストールするだけでOK。

docker build

$ docker build -t weathernews/wgrib2:1.0 .

もし部屋が暑いなら、ビルドが終わるのを待つ間にハーゲンダッツでも食べましょう。きっと幸せになれます✌️

wgrb2の実行

$ docker run -i -t weathernews/wgrib2:1.0 wgrib2 -version
v0.2.0.6c 2/2017  Wesley Ebisuzaki, Reinoud Bokhorst, John Howard, 
Jaakko Hyvätti, Dusan Jovic, Daniel Lee, Kristian Nilssen, Karl Pfeiffer, 
Pablo Romero, Manfred Schwarb, Gregor Schee, Arlindo da Silva, 
Niklas Sondell, Sam Trahan, Sergey Varlamov

インストールできたことを、確認できました!

あとは、GRIB2データをマウントして、好きなようにwgrob2コマンドを実行していきましょう。

おわりに

Docker化したことで、Dockerさえ入っていれば気軽にGRIB2データを扱えるようになり、ハッピーだと思います。
おしまい。😄