こんにちは。エクセルソフトの田淵です。
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.
無事終わりました。ここまで良さそうなので、exit
と docker 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 : エクセルソフト をご覧ください。
以上です。