Docker で Realm Object Server のイメージを作る

こんにちは。エクセルソフトの田淵です。

Realm Mobile Platform の勉強をしている際に、インストールやアンインストールを繰り返していたため、Docker で出来たら便利だなーと思いました。

2018/2/14 追記:
Realm Platform 2.0 では、npm で動作するようにリニューアルされ、Realm Platform 2.0 の Dokcerimage が Realm 社から提供されています。

インストール

docker pull realmio/realm-object-server

起動

docker run -p 9080:9080 -e ROS_TOS_EMAIL_ADDRESS=<your-email-address> realm/realm-object-server



















Docker で動作する Realm イメージを作ってみましょう。ポエム的になってしまいましたので、結論から知りたい方は $ docker pull ubuntu をやったうえで以下の Dockerfile$ docker build -t . でビルドしてください。

FROM ubuntu:latest

MAINTAINER ytabuchi

RUN apt-get update && \
    apt-get install -y curl && \
    curl -s https://packagecloud.io/install/repositories/realm/realm/script.deb.sh | bash && \
    apt-get install -y realm-object-server-developer

EXPOSE 9080

CMD ["/usr/bin/realm-object-server", "-c", "/etc/realm/configuration.yml"]

色々やってみた

こちらの公式ドキュメント Realm Object Server Linux Download の Ubuntu の手順を Docker 上でやってみます。テストは社内の X220(古い)にインストールした Ubuntu 16.04 LTS です。

$ uname -a
Linux X220-Ubuntu 4.10.0-33-generic #37~16.04.1-Ubuntu SMP Fri Aug 11 14:07:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Docker のインストールは公式ドキュメント Get Docker CE for Ubuntu | Docker Documentation や各所のブログ記事をご覧ください。

Ubuntu イメージ取得

$ docker pull ubuntu

まずは Ubuntu:latest を取得します。

Ubuntu を起動して設定開始

Ubuntu に Realm の設定をしていき、Dockerfile を作成することが目標です。Dockerfile は最初から書くよりも Commit していきながら作っていくのがおすすめです。

Dockerの作業済みコンテナからイメージを作って移植を楽にする - Qiita

効率的に安全な Dockerfile を作るには - Qiita

このあたりの記事が参考になります。

早速設定していきましょう。

$ docker run -it --name realm ubuntu

起動したので、公式のインストールの手順に沿って進めていきます。

Realm Object Server Linux Download

やることは以下

# RealmのPackageCloudリポジトリをセットアップ
curl -s https://packagecloud.io/install/repositories/realm/realm/script.rpm.sh | sudo bash

# Realm Object Serverをインストール
sudo yum -y install realm-object-server-developer

# サービスとして登録、起動
sudo chkconfig realm-object-server on
sudo service realm-object-server start

これを Docker でやっていきます。Docker コンテナは root で入っているので sudo は不要ですね。

# curl -s https://packagecloud.io/install/repositories/realm/realm/script.rpm.sh | bash

以下のエラーが返ってきましたw

bash: curl: command not found

では、、、ということで curl 入れましょう。

# apt-get install curl

エラー

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package curl

こういう一般的な話は見飽きてると思うので飛ばしていきます。apt が最新のレポジトリを参照していないからだけなので、update して curl インストールして、コマンド打つだけですね。

apt-get update && \
apt-get install -y curl && \
curl -s https://packagecloud.io/install/repositories/realm/realm/script.deb.sh | bash

上記の記事にもありましたが、入力待ちで止まらないように y オプションなどを使い、余計なコマンドは入れないようにしましょう。

The repository is setup! You can now install packages.

無事終わりました。ここまで良さそうなので、exitdocker commit しておきます。docker commit の書式は docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] ですので、ubuntu:realm のタグをつけて保存してみます。

$ docker commit realm ubuntu:realm

保存できたので、一度コンテナは削除して(もちろん別の名前でやっても良いです。)今作ったイメージから起動してみます。

$ docker rm realm
$ docker run -it --name realm ubuntu:realm

作業の続きを

# apt-get update

これで準備が整ったので、Realm Object Server のインストールです。

# apt-get install -y realm-object-server-developer

無事終わったっぽいので、一度 docker commit してアップデートします。その後再度起動してサービスに登録しましょう。

# systemctl enable realm-object-server
Created symlink /etc/systemd/system/multi-user.target.wants/realm-object-server.service, pointing to /etc/systemd/system/realm-object-server.service.

起動スクリプトが /etc/systemd/system/realm-object-server.service にコピーされていい感じっぽいので、サービス起動!

# systemctl start realm-object-server
Failed to connect to bus: No such file or directory

おっとエラー…

ここからはいろいろ調べました。サービスは特権階級で実行すれば良い。とかあったので、一度別の名前で docker commit してやって、--privileged--cap-add=SYS_ADMIN を試してみたりしましたがダメでした。

--privileged でダメなら動かせないのかと思いましたが、悔しいのでまずは起動スクリプトを見てみました。

# cat /etc/systemd/system/realm-object-server.service
[Unit]
Description=Realm Object Server
After=network.target

[Service]
TimeoutStartSec=0
ExecStart=/usr/bin/realm-object-server -c /etc/realm/configuration.yml
Restart=on-failure
User=realm
Group=realm
LimitNOFILE=65535
LimitCORE=infinity
WorkingDirectory=/var/lib/realm/object-server/tmp

[Install]
WantedBy=multi-user.target

ExecStart で起動してますね。configuration.yml が設定ファイルみたいなので見てみましょう。WorkingDirectory も気になるところ。

yml は長いので割愛しますが、root_path: /var/lib/realm/object-server で WorkingDirectory が設定されているのと Auth のトークンの場所やログ、バックアップの場所などが指定されているだけで後はコメントアウトされていました。これをまずは叩いてみたところ動いていた感じがしますので、ポート 9080 を開けてもう一度起動してみます。

$ docker run -it --name realm -p 9080:9080 ubuntu:realm
# /usr/bin/realm-object-server -c /etc/realm/configuration.yml

アクセスしてみます。

動いてる〜😭🙌✌

だったらサービスじゃなくてもまぁいいか。ということで Dockerfile にしちゃいましょう。

Dockerfile 作成

任意のディレクトリに Dockerfile を作成し、以下をペーストします。(MAINTAINER は適宜置き換えてください。)

FROM ubuntu:latest

MAINTAINER ytabuchi

RUN apt-get update && \
    apt-get install -y curl && \
    curl -s https://packagecloud.io/install/repositories/realm/realm/script.deb.sh | bash && \
    apt-get install -y realm-object-server-developer

EXPOSE 9080

CMD ["/usr/bin/realm-object-server", "-c", "/etc/realm/configuration.yml"]

後は、docker build するだけです。フォルダに Dockerfile 以外のファイルがあると一緒に取り込まれてしまうので、適宜 .dockerignore で除外するなどしてください。

$ $ docker build -t ytabuchi/realm .
Successfully built b76e38ac30f8

できたみたいです。

$ docker images
REPOSITORY                                TAG                 IMAGE ID            CREATED             SIZE
ytabuchi/realm                            latest              b76e38ac30f8        3 minutes ago       447 MB

やりましたね!起動してみましょう。

$ docker run -d --name realm -p 9080:9080 ytabuchi/realm

無事起動もできました!

お好みで Docker Hub にアップしたり。

$ docker login
$ docker push ytabuchi/realm

すぐに使いたい方は、

$ docker pull ytabuchi/realm
$ docker run -d --name realm -p 9080:9080 ytabuchi/realm

で試せます。

Docker についての詳細は製品ページ Docker Enterprise - Datacenter : エクセルソフト をご覧ください。

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする