いしぐめも

プログラミングとかしたことを書きます。

Oracle Cloud InfrastructureにDockerでPersoniumを建てる

はじめに

OCI(Oracle Cloud Infrastructure)でARM(aarch64)なVMインスタンスを作れるようになりました。わーい(作れるとは言ってない。後述)

japan.zdnet.com

詳細はいろいろプレスが打たれていて、記事も出ているのでそちらを参照いただくとして… 気になるのはコレ!

「Always Free Arm」により、開発者らは4つのA1コアと24GBのメモリーにアクセスできる

こりゃオタメシしてみる他ないな!!!ということで、今回試してみました。

注意: Out of host capacity 問題

このARMインスタンス、かなり人気のようで、VM作ろうにもキャパシティ不足で安定して作れません。昨晩作れたインスタンスをウッカリ止めてしまって翌朝動かそうとしてもキャパシティが足りず動かせないこともありました。

東京リージョンより大阪リージョンの方が潤沢にキャパシティがあるようなので(もしくは東京の方が需要がある?)、大阪リージョンをオススメします。最初のリージョンを東京にしてアカウント作成してしまうと大阪のリージョンを使用するには追加の手続きが必要になってなかなかVM作成までたどり着けません。ぼくはこのために20日ぐらい無駄に費やしました。

f:id:yoh1496:20210622100820p:plain
Out of host capacity

上の画像は 1コア6GB のVMを 2コア12GB に変更しようとして失敗している図。これ、実際ガチに使ってみよう!ってなった時に困らないんだろうか…

手順

まぁそれはさておき、VMを作ってみたので記録として残しておきます。当然のことながら、ここで紹介している内容を実施して何らかの問題が発生しても一切の責任を負いかねますのでご了承ください。

VMを立てる

まずはリージョンを選び、

f:id:yoh1496:20210622101735p:plain
リージョンは大阪

シェイプを選びます。「Always Free Arm」の恩恵を受けられるのはA1コアのシェイプ、つまり VM.Standard.A1.Flex です。名前の横に「Always Free Eligible」と表示されているのがそれです。

f:id:yoh1496:20210622101912p:plain
シェイプはVM.Standard.A1.Flexを選択

OSではデフォルトでOracle Linuxが選択されていますが、特にOracle Linux使いたいとかはないのでUbuntuを選びます。 Ubuntu 20.04 (Minimumでないもの)は対応しているようなのでコレを使っていきます。

f:id:yoh1496:20210622102140p:plain
Ubuntu 20.04が使用可能

で、SSH接続で必要になるカギをダウンロードしておき、作成

f:id:yoh1496:20210622111017p:plain
SSH用の鍵をダウンロード

こんな感じになりました。

f:id:yoh1496:20210622111411p:plain
インスタンス詳細

SSH接続する

Windowsマシンから接続を行っていきます。下記のような config ファイルをユーザディレクトリの .ssh フォルダに配置すれば ssh oracle で繋がるようになります。

f:id:yoh1496:20210622111816p:plain
SSH Config

ssh oracle (ッターン

f:id:yoh1496:20210622112537p:plain
uname -a してみた

Dockerを導入

さて、これでVMにログインすることができるようになったのでDockerを使えるようにしていきます。 aarch64とはいえ、公式のドキュメントに従ってコマンドポチポチしていけば導入できますので、ここでは詳細を省きます。

docs.docker.com

f:id:yoh1496:20210622112922p:plain
docker導入完了

あとはユーザーを docker グループに入れておくと何かと便利です。

sudo usermod -aG docker ubuntu

そして、docker-composeも導入しておきます。が、aarch64 だとバイナリが配布されていないので、python3から導入しました…

sudo apt-get install python3-pip
sudo pip install docker-compose

sudo で pip install するのがそこはかとなく気持ち悪いが仕方ない…

Personium導入

ここまでくればあとちょっとです。

git clone https://github.com/personium/personium-docker.git

とりあえず、Personiumコミュニティで出しているdockerの資材を引っ張ってきます。

諸々修正

もろもろがaarch64だと動かないみたいなので、修正していきます。

  • docker-compose.yml に記載されている Elasticsearchのコンテナイメージを docker.elastic.co/elasticsearch/elasticsearch:7.13.2-arm64 に変更する
  • docker-compose.yml に記載されている activeMQのコンテナイメージを symptoma/activemq:5.16.2-multiarch に変更する
  • personium/Dockerfile に記載されている CORE_VER1.7.22 , ENGINE_VER1.5.28 に変更する

一応、これだけの修正で起動はすることを確認しました。

docker-compose up

ファイアウォールに穴をあける

personium-dockerはデフォルトでnginxが80番ポートをリッスンしているので、Security Listで80番ポートへのTCPを空ければ外からアクセスすることができるようになります。

が、デフォでは localhost で動く想定になってしまっているので、ちゃんと外から使えるようにするには別途設定が必要になります。続きはまた別の記事にしたいと思います。

終わりに

4コア 24GB ものリソースが無料で使えるなんて!!!と歓喜しましたが、やはりaarch64ということもあってamd64と遜色なく使えるとまではいきませんが、ちゃんとワークアラウンドがあり、ひと手間かければ 開発環境として全然使っていけるな、という印象を抱きました。

個人的なARMの印象ってarmhfが強すぎるんですが、AppleがM1チップでだいぶ話題になったように、対応するソフトウェアが増えていってどんどん使いやすくなっていってる気がします。

今回、ためしにPersoniumを動かしてみました。Personiumコミュニティはメンバーを募集中です。興味あればいつでもお声がけください。遊びとか趣味でも全然かまいません!