masa.yamaguchi
2024年11月12日 17時23分
==========
製品型番:Aramadillo-610
ABOSバージョン:3.20.3-at.3
カーネルバージョン: 5.10.226
その他:
==========
基本的な質問ですが、お伺いしたいことがございます。
Armadillo-610(Armadillo Base OS )において、複数コンテナ間で1つのファイルを共有する場合、どのような方法を使用するのが良いでしょうか。
(複数コンテナで 同じフォルダをマウントする等)
→排他を考慮した方法が既に存在するか不明の為お伺いしております。
at_shinya.koga
2024年11月13日 10時01分
アットマークテクノの古賀です。
masa.yamaguchiさん:
>Armadillo-610(Armadillo Base OS )において、複数コンテナ間で1つのファイルを共有する場合、どのような方法を使用するのが良いでしょうか。
>(複数コンテナで 同じフォルダをマウントする等)
>→排他を考慮した方法が既に存在するか不明の為お伺いしております。
おっしゃるように、共有したいファイルを配置したフォルダを各々のコンテナがマウントして、共有ファイルに対して排他アクセスをするのがよいでしょう。
共有するファイルに対して、それぞれのコンテナからの書き込みを許すのか、あるいは、読み出しのみを行うコンテナと書き込みのみを行うコンテナに責務を
分担できるのか、および、共有ファイルに書き込むデータの形式や、書き込んだ内容を永続化するかどうか、などで最適な方策が変わると思います。
共有ファイルに対する排他アクセスを行う簡単な方法は、flock システムコールや、それを利用した flock コマンドを使うことだと思います:
https://ja.manpages.org/flock/2
https://ja.manpages.org/flock
https://qiita.com/e_tyubo/items/af543ff4619e85a98c9a
代案として、次のやり方も考えられます:
・通常のファイルではなく、SQLite のデータベースを共有ストレージとして使用する。
SQLite は、複数プロセスが同じデータベースファイルをオープンして動作できる排他制御機構を備えています。
https://www.sqlite.org/faq.html#q5
ファイル内容のフォーマットに特に制限がなく、データをコンテナ間で共有して相互に更新・参照できればよいのであれば、データベースを共有ストレージとして使用するという解も有効だと思います。
・Memcached
ストレージをコンテナ間で共有する密結合ではなく、ネットワーク通信による疎結合を行うのであれば、ストレージを保有・管理する責務を一つのコンテナだけに負わせ、他のコンテナからは、ネットワーク通信経由でストレージにアクセスする、という方策もとれるでしょう。
コンテナ同士を疎結合して、共有データを永続化する必要がない場合には、Memcached を使うのも選択肢に入ると思います:
https://github.com/memcached/memcached/tree/master
https://pymemcache.readthedocs.io/en/latest/getting_started.html
コンテナ間でストレージを共有せず、ネットワーク通信による疎結合にしておけば、コンテナの一つを別の Armadillo で動かす構成に変更する場合も対応が簡単、というのが利点になる場合もあるでしょう。
クラウドなど、仮想化ベースの分散コンピューティング環境に馴染んでいる人には、このアプローチが自然かも知れません。