こんにちは!!こんにちは!! インフラエンジニアのyamamotoです。
今日はdocker設定の小ネタを一つお届けいたします。
当社では、サービス開発のステージングサーバーとして、dockerやdocker-composeを活用して非常に多くのステージング環境を賄っています。
コンテナが増えてくると心配になるのが、IPアドレスの枯渇です。ではdockerはデフォルトでどのようにIPアドレスを割り当てているでしょうか?
dockerのIPアドレスが枯渇する!?
dockerのIPアドレスの割り当て方は、通常のdockerコンテナと、docker-compseで作成されるコンテナ群とで異なります。
通常のコンテナはお行儀よく1IPずつ使用していきますが、docker-composeは1つの環境でネットワークゾーンを1つ確保します。
どういうことかというと、dockerのネットワークは基底IPアドレス 172.17.0.0/12 (1,048,576IP) ですが、docker-composeでネットワークゾーンを作成すると、デフォルトで一つにつき/16、つまり65,536個ものIPアドレスをキープしてしまいます。
いくらdocker-composeを使っても、そんなにコンテナ立ち上げないですよね……このままだと瞬く間にIPアドレスが足りなくなってしまいます。
dockerのデフォルト設定を変えてみる
前述のとおり、dockerのIPアドレス割り振りはデフォルトで下記のようになっています。
- 基底IPアドレス :172.16.0.0/12
- ゾーン割当サイズ:/16ごと
dockerのバージョンが18.06以上であればこの設定を変えることができます。
では、設定を変えてみましょう。
設定の変更には /etc/docker/daemon.json ファイルを編集します。
このファイルに下記のように書き足してみます。
{ "default-address-pools": [ {"base":"172.16.0.0/12","size":24} ] }
※一応、dockerdの引数でも指定が可能です
https://docs.docker.com/engine/reference/commandline/dockerd/
書き足したらdockerデーモンの再起動が必要です。
再起動するとコンテナが全てダウンしてしまうのでご注意ください。
上記の設定では、基底となるIPアドレスが 172.16.0.0/12、ゾーン割当サイズ /24 で設定しています。
この設定を入れることで、dockerが割り当てるIPアドレスが変わります。上記の設定では、docker-composeでネットワークゾーンを作成すると/24の255IPしか使わなくなります。
さいごに
いかがでしょうか? 特にdocker-composeをたくさん使う場合にはオススメですね。
そして、私たちと一緒にコンテナまみれになってみませんか?
アクトインディではコンテナフェチの仲間を募集しています!!