こんにちは。エクセルソフトの田淵です。
Realm Mobile Platform の勉強をしている際に、インストールやアンインストールを繰り返していたため、Docker で出来たら便利だなーと思いました。
2018/2/14 追記:
Realm Platform 2.0 では、npm で動作するようにリニューアルされ、Realm Platform 2.0 の Dokcerimage が Realm 社から提供されています。
インストール
[code lang=text]
docker pull realmio/realm-object-server
[/code]
起動
[code lang=text]
docker run -p 9080:9080 -e ROS_TOS_EMAIL_ADDRESS=<your-email-address> realm/realm-object-server
[/code]
Docker で動作する Realm イメージを作ってみましょう。ポエム的になってしまいましたので、結論から知りたい方は $ docker pull ubuntu
をやったうえで以下の Dockerfile
を $ docker build -t .
でビルドしてください。
[code lang=text]
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"]
[/code]
色々やってみた
こちらの公式ドキュメント Realm Object Server Linux Download の Ubuntu の手順を Docker 上でやってみます。テストは社内の X220(古い)にインストールした Ubuntu 16.04 LTS です。
[code lang=bash]
$ 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
[/code]
Docker のインストールは公式ドキュメント Get Docker CE for Ubuntu | Docker Documentation や各所のブログ記事をご覧ください。
Ubuntu イメージ取得
[code lang=bash]
$ docker pull ubuntu
[/code]
まずは Ubuntu:latest を取得します。
Ubuntu を起動して設定開始
Ubuntu に Realm の設定をしていき、Dockerfile を作成することが目標です。Dockerfile は最初から書くよりも Commit
していきながら作っていくのがおすすめです。
Dockerの作業済みコンテナからイメージを作って移植を楽にする - Qiita
効率的に安全な Dockerfile を作るには - Qiita
このあたりの記事が参考になります。
早速設定していきましょう。
[code lang=bash]
$ docker run -it –name realm ubuntu
[/code]
起動したので、公式のインストールの手順に沿って進めていきます。
Realm Object Server Linux Download
やることは以下
[code lang=bash]
# 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
[/code]
これを Docker でやっていきます。Docker コンテナは root で入っているので sudo
は不要ですね。
[code lang=bash]
# curl -s https://packagecloud.io/install/repositories/realm/realm/script.rpm.sh | bash
[/code]
以下のエラーが返ってきましたw
[code lang=bash]
bash: curl: command not found
[/code]
では、、、ということで curl 入れましょう。
[code lang=bash]
# apt-get install curl
[/code]
エラー
[code lang=bash]
Reading package lists… Done
Building dependency tree
Reading state information… Done
E: Unable to locate package curl
[/code]
こういう一般的な話は見飽きてると思うので飛ばしていきます。apt
が最新のレポジトリを参照していないからだけなので、update
して curl
インストールして、コマンド打つだけですね。
[code language=”bash”]
apt-get update && \
apt-get install -y curl && \
curl -s https://packagecloud.io/install/repositories/realm/realm/script.deb.sh | bash
[/code]
上記の記事にもありましたが、入力待ちで止まらないように y オプションなどを使い、余計なコマンドは入れないようにしましょう。
[code lang=bash]
The repository is setup! You can now install packages.
[/code]
無事終わりました。ここまで良さそうなので、exit
と docker commit
しておきます。docker commit
の書式は docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
ですので、ubuntu:realm
のタグをつけて保存してみます。
[code lang=bash]
$ docker commit realm ubuntu:realm
[/code]
保存できたので、一度コンテナは削除して(もちろん別の名前でやっても良いです。)今作ったイメージから起動してみます。
[code lang=bash]
$ docker rm realm
$ docker run -it –name realm ubuntu:realm
[/code]
作業の続きを
[code lang=bash]
# apt-get update
[/code]
これで準備が整ったので、Realm Object Server のインストールです。
[code lang=bash]
# apt-get install -y realm-object-server-developer
[/code]
無事終わったっぽいので、一度 docker commit
してアップデートします。その後再度起動してサービスに登録しましょう。
[code lang=bash]
# systemctl enable realm-object-server
[/code]
[code lang=bash]
Created symlink /etc/systemd/system/multi-user.target.wants/realm-object-server.service, pointing to /etc/systemd/system/realm-object-server.service.
[/code]
起動スクリプトが /etc/systemd/system/realm-object-server.service
にコピーされていい感じっぽいので、サービス起動!
[code lang=bash]
# systemctl start realm-object-server
[/code]
[code lang=bash]
Failed to connect to bus: No such file or directory
[/code]
おっとエラー…
ここからはいろいろ調べました。サービスは特権階級で実行すれば良い。とかあったので、一度別の名前で docker commit
してやって、--privileged
や --cap-add=SYS_ADMIN
を試してみたりしましたがダメでした。
--privileged
でダメなら動かせないのかと思いましたが、悔しいのでまずは起動スクリプトを見てみました。
[code lang=bash]
# cat /etc/systemd/system/realm-object-server.service
[/code]
[code lang=text]
[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
[/code]
ExecStart
で起動してますね。configuration.yml
が設定ファイルみたいなので見てみましょう。WorkingDirectory
も気になるところ。
yml は長いので割愛しますが、root_path: /var/lib/realm/object-server
で WorkingDirectory が設定されているのと Auth のトークンの場所やログ、バックアップの場所などが指定されているだけで後はコメントアウトされていました。これをまずは叩いてみたところ動いていた感じがしますので、ポート 9080 を開けてもう一度起動してみます。
[code lang=bash]
$ docker run -it –name realm -p 9080:9080 ubuntu:realm
[/code]
[code lang=bash]
# /usr/bin/realm-object-server -c /etc/realm/configuration.yml
[/code]
アクセスしてみます。
動いてる〜😭🙌✌
だったらサービスじゃなくてもまぁいいか。ということで Dockerfile
にしちゃいましょう。
Dockerfile 作成
任意のディレクトリに Dockerfile を作成し、以下をペーストします。(MAINTAINER は適宜置き換えてください。)
[code lang=text]
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"]
[/code]
後は、docker build
するだけです。フォルダに Dockerfile
以外のファイルがあると一緒に取り込まれてしまうので、適宜 .dockerignore
で除外するなどしてください。
[code lang=bash]
$ $ docker build -t ytabuchi/realm .
[/code]
[code lang=bash]
Successfully built b76e38ac30f8
[/code]
できたみたいです。
[code lang=bash]
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ytabuchi/realm latest b76e38ac30f8 3 minutes ago 447 MB
[/code]
やりましたね!起動してみましょう。
[code lang=bash]
$ docker run -d –name realm -p 9080:9080 ytabuchi/realm
[/code]
無事起動もできました!
お好みで Docker Hub にアップしたり。
[code lang=bash]
$ docker login
$ docker push ytabuchi/realm
[/code]
すぐに使いたい方は、
[code lang=bash]
$ docker pull ytabuchi/realm
$ docker run -d –name realm -p 9080:9080 ytabuchi/realm
[/code]
で試せます。
Docker についての詳細は製品ページ Docker Enterprise - Datacenter : エクセルソフト をご覧ください。
以上です。