うさぎ好きエンジニアの備忘録

うさぎたちに日々癒されているエンジニアが業務で直面したもの & 個人的な学習メモを残していきます。

Docker が扱う namespace

kubenetesとかdockerとかなんとなく触ってはいるけど、正直詳しく知らない。 なのでGW中にせめてdockerとだけでも仲良くなろうと思う。

まず第一弾はnamespaceについて。

PID namespace

  • PIDとプロセスを隔離する
  • namespaceの異なるプロセス同士はお互いにアクセスできない

Network namespace

  • IPアドレス、ポート番号、ルーティングテーブルなど、ネットワークに関する情報をnamespaceごとに定義可能にする
  • ホストOS上で使用中のポート番号も利用可能になる

UID namespace

  • UID/GIDをnamespaceごとに独立して持つことが可能
  • namespaceとUID/GIDが紐づけられるため、namespaceの内外で異なるUID/GIDを持つことが可能になる
    • 例えばnamespace内ではUID/GIDが0のrootユーザを、ホストOS上では一般ユーザとして扱える
    • namespace内の管理者アカウントはホストOSに対して管理権限を持たないということを意味するため、セキュアな環境に隔離可能

MOUNT namespace

  • マウント操作を行うと、namespace内に隔離されたファイルシステムツリーを構築する
  • namespace内で行ったマウントはホストOSや他namespaceからはアクセスできない

UTS namespace

  • namespaceごとにホスト名やドメイン名を独自に持つことを可能にする

IPC namespace

  • プロセス間通信(IPC)オブジェクトをnamespaceごとに独自に持つことを可能にする
  • IPCは共有メモリやセマフォ、メッセージングキューのこと