Tag: Container

日常CLIコンテナでhost UID/GIDに合わせてshellへ入る設計

日常CLIコンテナでhost UID/GIDに合わせてshellへ入る設計

目的

日常的に使う CLI tool をコンテナ image にまとめると、host の環境を壊さずに新しい tool や最新版を試せる。 一方で、作業ディレクトリを bind mount して shell に入る場合、コンテナ内ユーザーの UID/GID が host とずれると、作成ファイルの所有者が壊れる。

Dockerfile に個人の user name、UID、GID を焼かず、起動時に host user に合わせる。

shell wrapperとentrypointを分ける

責務を分ける。

shell wrapper:
  - host側で実行する
  - container runtimeを選ぶ
  - bind mountを組み立てる
  - hostのUID/GID/USER/HOMEを環境変数で渡す
  - containerは一度rootで起動する

entrypoint:
  - container内で実行する
  - hostと同じUID/GIDのuser/groupを作る
  - 必要な補助groupを設定する
  - 作業userへ権限を落としてcommandを実行する

この形にすると、image 自体は汎用のままにできる。 利用者ごとの UID/GID は runtime の入力として扱う。

Read more...