piapia123
ja

Docker デーモンのアドレスプール設計

Web

処理はすべてブラウザ内で完結します。データは送信されません

出力

Docker のアドレス割り当てを設計します。ユーザー定義ネットワーク 1 つにどのくらいのサブネットを割り当てるか、いくつ作るか、どのプールから切り出すか。/etc/docker/daemon.json にそのまま貼れる断片と、ネットワークごとのサブネット一覧(使用可能数・収容できるコンテナ数・先頭と末尾の使用可能アドレス付き)を出力します。 ⚠️ サブネットの大きさが分からないときは「サブネットサイズ」を自動にして「ネットワークあたりのコンテナ数」を入力すると、収まる中で最小のプレフィックスを選びます。⚠️ 各サブネットはネットワークアドレスとブロードキャストを差し引き、Docker の bridge がさらに 1 つをゲートウェイとして使うため、/24 で収容できるのは 256 個ではなく 253 個のコンテナです —— 自動選択はこの 3 つを織り込んでいます。 ⚠️ より重要なのは衝突チェックです。Docker 自身がいくつかの範囲を使用しており(docker0 は既定で 172.17.0.0/16、既定プールは 172.16.0.0/12、bridge は既定で 172.18.0.0/16 から)、プールがこれらに入ると初期設定と衝突します。各範囲を比較し、サブネット同士の重複も確認します。収まらない場合(サブネットがプールより大きい、またはネットワーク数がプールから切り出せる数を超える)は、必要なプレフィックスの幅と何番目のネットワークが収まらないかを明示します。compose ↔ docker run の相互変換が必要な場合は別のツールです(「Compose ↔ docker run」)。計算はすべてブラウザ内で完結し、生成結果は送信されません。

機能

  • /etc/docker/daemon.json にそのまま貼れる断片を生成
  • サブネットサイズは「自動」を選べる:ネットワークあたりのコンテナ数から収まる中で最小のプレフィックスを選択(ネットワークアドレス・ブロードキャスト・bridge ゲートウェイは差し引き済み)
  • 何番目のネットワークがどのサブネットかを順番に一覧表示。各サブネットの使用可能数・収容コンテナ数・先頭と末尾の使用可能アドレス付き
  • docker0・既定プール・bridge 既定との重複、およびサブネット同士の重複をチェック
  • 任意で bip(docker0 ブリッジのアドレス)も出力
  • base にホスト部がある場合、正しいネットワークアドレスを指摘
  • ⚠️ 収まらない場合は明確にエラー:サブネットがプールより大きいときは必要なプレフィックスを、ネットワーク数が超えるときは何番目が収まらないかと base をどこまで広げるかを表示
  • すべてローカル計算で、設定がブラウザの外に出ません

使い方

  1. ネットワークあたりのサブネットサイズを選びます(自動、または /16〜/28)
  2. 「自動」を選んだ場合はネットワークあたりのコンテナ数を入力します(それ以外は不要)
  3. 作成するネットワーク数とプールの base を入力します
  4. 必要なら bip にチェックを入れます
  5. daemon.json の断片をコピーするか、サブネット一覧で確認します(compose ↔ docker run の変換は別のツールです)

よくある質問

サブネットの大きさが分からないときは? 「自動」を使います
「サブネットサイズ」を自動にし、「ネットワークあたりのコンテナ数」を入力すると、収まる中で最小のプレフィックスを選びます。⚠️ 計算は「コンテナ数を 2 の冪に切り上げる」だけではありません:各サブネットはネットワークアドレスとブロードキャストを差し引き、Docker の bridge がさらに 1 つをゲートウェイとして使うため、収容できるコンテナ数は 2^(32 − プレフィックス) − 3 です。/24 に収まるのは 256 個ではなく 253 個で、254 個を入れるには /23 が必要です。⚠️ 自動選択のプレフィックスは /30 が上限です —— Docker は /31 と /32 をプールの size として受け付けません。
default-address-pools と bip の違いは?
bip は既定ブリッジ docker0 自身のアドレス(初期値 172.17.0.1/16)を設定します。default-address-pools は docker network create で作るユーザー定義 bridge ネットワークをどこからどの大きさで切り出すかを制御します。両者は重複してはならず、Docker が起動時に確認します。
base が /16 で size が /28 はなぜエラーではないのですか?
/16 のプールから /28 を切り出すのは完全に合法で(最大 4096 個)、公式の例も base /16 と size /24 の組み合わせです。本当に誤りなのは逆で、size のプレフィックスが base より小さい(サブネットがプールより大きい)場合や、作成数がプールから切り出せる数を超える場合です。本ツールはそれらをエラーにし、数千個になる場合は確認を促すだけです。
既定の 172.17.0.0/16 で衝突が出るのはなぜですか?
そこは docker0 が初期状態で使用する範囲であり、Docker の既定プール 172.16.0.0/12 にも含まれるからです。避けるには、base を 10.0.0.0/8 の中から選んでください(例:10.201.0.0/16)。

関連ツール