All Articles

Dockerコンテナ上にVoltDBをインストールするメモ

Dockerの勉強ついでに

あんまりDB・ストレージ系の性能を気にしたことが無くて(気にしないといけないんですが)、 VoltDBがインメモリで速いらしい、ということで性能を試したくなりました。(本当はriakを試すつもりだったんですが、興味がコロコロと…)

が、今回はインストールからバンドルされてるサンプルプロジェクトを動かすまでのメモです。

せっかくなのでDockerコンテナ上のUbuntuに入れて動かしてみます。どちらかというとDockerのメモがメインです。

Volt DBとは

VoltDBはIngresやPostgreSQLに携わったマイケル・ストーンブレーカーにより設計されたインメモリデータベースである。 - WikiPediaより引用

ということで、Postgresの開発に関わってる人が作ってるみたいです。MemcachedやRedisの代替で使えそうだけど、 SQLはJavaから動かしたりプロシージャを介してなんやかんやするらしいのでハードル高そうな感じ(´ω`)Javaワカリマセン

Dockerfileの設定から起動まで

Dockerのコンテナ作りから始めます。メイン端末がMacなのでboot2docker上で動かします(boot2dockerのインストールなどは省略)。 こんな感じで書いた。

FROM ubuntu:12.04
MAINTAINER Yoshiaki Sugimoto

# system update
RUN apt-get update
# install dependency middlewares
RUN apt-get install wget openssh-server openjdk-7-jdk gcc ntp -y

# get and extract voltdb
RUN cd /root && wget -q http://voltdb.com/downloads/technologies/server/LINUX-voltdb-ent-4.5.tar.gz
RUN tar xfz /root/LINUX-voltdb-ent-4.5.tar.gz -C /usr/local
# enable to use voltdb management commands
ENV PATH /usr/local/voltdb-ent-4.5/bin:$PATH

# ssh settings
RUN mkdir -p /var/run/sshd
RUN sed -ri "s/#PermitRootLogin yes/PermitRootLogin yes/" /etc/ssh/sshd_config
RUN echo "root:root" | chpasswd

# port ssh
EXPOSE 22
# port voltdb admin
EXPOSE 8080

CMD ["/usr/sbin/sshd"undefined "-D"]

色々試してて気づいたけど、CMDセクションは一つしか駄目みたい(起動後にdocker inspectしてもConfig.Cmdは最後の一つしか渡っていなかった)。 もしかしたら方法あるかもしれないし、起動スクリプトをADDしてまとめて実行するとかでもいいかな?今回は一旦セットアップを済ませた後にsshdを起動しておいて、後からsshでログインして起動する方法にした。

で、docker imageをビルド。

$ docker build -t voltdb

成功したらバックグラウンドで起動させる。ポートフォワーディングの指定を忘れずに。

$ docker run -d -p 60001:22 -p 60002 8080 --name voltdbsample voltdb

8080ポートを解放・フォワード指定しているのは、VoltDBの管理ツールみたいなのがこのポートで実行されるから。 あとはdocker psで起動を確認できればOK。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
b74a21a58639        voltdb:latest       /usr/sbin/sshd -D   5 seconds ago       Up 3 seconds        0.0.0.0:60001->22/tcpundefined 0.0.0.0:60002->8080/tcp   voltdbsample

ここまで来たら後は通常通り。SSHでログインして起動する。 ポートフォワーディングとかDockerfileの設定などは以下を参考に。ここでは60001(ssh)/8899(http)をそれぞれホスト->ゲストにフォワードさせた。

Docker を Mac で使ってみた(Nodeアプリ例)

安定のhavelogである。

VoltDBの起動まで

SSHでログインしたら、サンプルプロジェクトをコンパイル・起動する。サンプルプロジェクトはjson-sessionsを使う。

$ ssh root@localhost -p60001
root@xxxxxxx:~# cd /usr/local/voltdb-ent-4.5/examples/json-sessions && ./run.sh

すると、以下のようなAAが出て起動すればOK。

http:/loclhost:8899にアクセス(ポートフォワーディングが異なる場合はそのように)すれば起動状態が確認できる。

とりあえず、ここまで

VoltDBはNode/PHP/Rubyなどのクライアントもあるようなので、アプリから接続して実行するところまでやってみたい。 今回はDockerの勉強の方が優先だったので…。

今までこういうことをやろうと思うとVirtualBoxだったり別でVPS用意したりで結構手間がかかるものだけど、楽に軽量に生成と起動ができるのは素晴らしいですね。 特に同じ設定で複数インスタンスを作る場合は圧倒的に効率が良さそう。

現場からは以上です。