Open2

Project Musicbox: docker compose v2をラップした非常に小さなマルチコンテナ管理ソフトウェア

ngicksngicks

っていうのを作ったら面白いんじゃないかと思ってるのでメモ書き

目的

シングルサーバーでマルチコンテナアプリケーションを簡単に動かしたり管理したりするのに最適な小さな管理システムを作る。

背景

  • dockerをはじめとしたcontainer基盤のおかげでどこでも動くソフトウェアを配るのはすごく楽になった
  • containerは普通1 process - 1 contianerぐらいの粒度で分けるので、少し規模の大きなソフトウェアを作ると複数コンテナにわたったシステムとなる
  • これを配るのに最も適当なのは(筆者の知る限り)docker composeを使うことだ
  • 複数コンテナのマネジメントソフトで有名なのは、kubernetesだが、k3sというk8sを計量にするためにいろいろしているプロダクトですら、~1.5GB程度のメモリフットプリントがあり、使わない機能が多く存在することを考えるとオーバーキルである

個人的動機

  • raspberry piとか(QNAP | Synology) NASとかを買おうと思っていて、そのうえでマルチコンテナなシステムを動かして遊びたい
  • k3sはオーバーキルっぽいのでなんかもっと簡単なものがないかなと思っている。

Musicbox

名づけ

  • orchestrator(オーケストラのための編曲者; 大規模な組織化を行うもの)というには小さい
    • 自動的にコンテナを動かしたり止めたりしてほしいだけ
      • 例えば特定の時間になったら特定のサービスを起動するとか
      • 例えば特定の時間になったらserviceに渡す環境変数を切り替えてrecreateをかけるとか
  • compose(構成する; 作曲する), orchestrator(オーケストラ向けに編曲するもの)という感じのフレーズに倣って覚えやすく、立ち位置がわかりやすくしたい

なので知ってるフレーズをかき集めて候補を作る

  • 候補1 orchestrion: 複数の楽器をくっつけたマシンで自動的に音楽を奏でる
  • 候補2 photoplayer: 無音声映画で流れる音全般を奏でるためのマシンのようだ
  • 候補3 music box: 日本語で言うところのオルゴール。

候補1はorchestratorと近いのが勘違いを招きそうだし立場的違いを際立たせなさそう、2は映画向けの効果音とかもセットに入っているのでニュアンスが違うかな、ということでmusic boxで決まり

コンポーネント

  • compose: github.com/docker/composeをラップしてGoからモジュールとして利用できるようにする
    • cliアプリとして作られすぎていて、go programから利用しようとするといろいろ工夫が必要です。
  • compose-controller: 上記composeをラップして、特定の条件に基づいてserviceをcompose startしたりcompose stopしたりするライブラリ
  • config-store: コンテナシステムに公開するためのconfigをhttp GET / PUTによって取得したり更新できるjsonストア
  • scheduler: スケジュールにもどついてserviceをcompose startしたりcompose stopしたり、ユーザーが登録したgo funcを実行する。
ngicksngicks

TODO

k3sのメモリ消費量にはおそらくcri-oやcontanerdのメモリも含まれていると思われるので、確認する