Dockerデーモンサブネットジェネレーター
Dockerが使用するサブネットを制御するdaemon.jsonの設定を生成します。対象となる設定はdefault-address-poolsとdocker0ブリッジアドレス(bip)です。指定した範囲に収まるネットワーク数を確認し、競合もチェックできます。
入力
出力
Readme
Docker のアドレスプールとは?
すべての Docker ネットワークには、サブネットと呼ばれる独自の IP アドレス範囲があります。サブネットを指定せずにネットワークを作成すると、Docker は 172.17.0.0/16 から 172.31.0.0/16、さらに 192.168.0.0/16 まで続く、組み込みのアドレスプール一覧から範囲を割り当てます。これは、選択された範囲が VPN、社内ネットワーク、固定アドレスで稼働するデータベースなど、別のものと競合するまでは問題なく動作します。すべてのネットワークに対して一度にこの問題を解決するには、Docker デーモンの設定でアドレスプールを変更します。
ツールの説明
このツールは、Docker が使用するサブネットを制御する daemon.json の設定を生成します。1 つ以上のアドレスプール範囲と各ネットワークのサイズを入力すると、default-address-pools 設定を取得できます。また、bip を使用してデフォルトの docker0 ブリッジのアドレスを設定することもできます。このツールは、入力したプールに収まるネットワーク数と各ネットワークのホスト数を表示し、入力中に内容を検証して、競合を引き起こす可能性が高い範囲を警告します。すべての計算はブラウザー内で行われます。
例
10.10.0.0/16 からすべての新しいネットワークに /24 を割り当てます。これにより、各ネットワークで 254 個の使用可能なホストを持つネットワークを 256 個確保できます。
{
"default-address-pools": [
{
"base": "10.10.0.0/16",
"size": 24
}
]
}デフォルトブリッジを別の範囲に移動し、2 つのプールを使用します。
{
"bip": "10.200.0.1/24",
"default-address-pools": [
{
"base": "10.10.0.0/16",
"size": 24
},
{
"base": "10.20.0.0/20",
"size": 24
}
]
}機能
- 複数のアドレスプール範囲を一度に指定(1 行につき 1 つ)
- Docker が各プールから切り出すネットワークのサイズを指定
- デフォルトの
docker0ブリッジ用アドレスを任意で指定 - プールに収まるネットワーク数と、各ネットワークの使用可能なホスト数を表示
- パブリックIPアドレス範囲、重複するプール、ホストビットが設定されたアドレスを警告
- 結果を
daemon.jsonとしてダウンロード
仕組み
範囲は、アドレスとプレフィックス長を組み合わせて記述します。たとえば 10.10.0.0/16 のように指定します。プレフィックスは 32 ビットのうちネットワーク部分に使用するビット数を示し、残りがホスト数を表します。各プールにはベース範囲とネットワークサイズがあります。Docker はベース範囲をそのサイズのネットワークに分割し、1 つずつ割り当てます。そのため、サイズ 24 の 10.10.0.0/16 では、2^(24 − 16) = 256 個のネットワークが得られます。/24 ネットワークには 256 個のアドレスがあり、そのうち 254 個が使用可能です。最初のアドレスはネットワークアドレス、最後のアドレスはブロードキャストアドレスとして使用されるためです。Docker は、ブリッジネットワークのゲートウェイとして最初の使用可能なアドレスも使用します。
サイズはベースのプレフィックスより小さくすることはできません。また、ネットワークにはゲートウェイと少なくとも 1 つのコンテナを収容する必要があるため、/30 に制限されています。
ヒント
- VPN や社内ネットワークで使用していない、10.0.0.0/8 または 172.16.0.0/12 の範囲を選択してください。192.168.0.0/16 付近の範囲は、自宅やオフィスのルーターで使用されるため、競合する可能性が最も高くなります
- デフォルトの
docker0ブリッジは常に 172.17.0.0/16 を使用します。この範囲がネットワークと競合する場合は、たとえば 10.200.0.1/24 のように、bipを別のアドレスに設定してください - Linux では結果を
/etc/docker/daemon.jsonとして保存し、Docker Desktop では「設定 → Docker Engine」に保存してから、Docker を再起動してください。ファイルにすでに存在する設定は置き換えるのではなく、統合してください default-address-poolsの変更は、その後に作成されるネットワークにのみ影響します。既存のネットワークを新しい範囲に移動するには、既存のネットワークを削除して再作成してください- 相互に重複するプールは管理しにくいため、互いに離して設定してください
- 「すべての事前定義済みアドレスプールが完全にサブネット化されています」と表示された場合、Docker の範囲が不足しています。より大きなベース範囲、またはより小さなネットワークサイズを追加すると、ネットワーク数を増やせます生