日常CLIコンテナでhost UID/GIDに合わせてshellへ入る設計
Posted: | Tags: cli, container, docker, linux
日常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...