Server Build Exercises on AWS (Amazon Web Services) 2022 edition

docker内でのDNS解決

docker は、docker が作り出した隔離空間(のコンテナ群)のために専用の DNS サーバを動かしています。 docker を動かしているホストとは別の DNS サーバです。 そのサーバの IP アドレスが 127.0.0.11 です。

この DNS サーバには、走らせているコンテナ名とIPアドレスが自動的に登録されます。 また、コンテナは、この DNS サーバを使うように自動的に設定されます。

これにより、 たとえば mysql という名のコンテナを実行(docker run --name=mysql ...)すれば、 他のコンテナは mysql という名前でサーバにアクセス出来ます。

ただし、この機能が使えるのは、ユーザ定義ネットワークに接続されたコンテナ群だけです。 デフォルトの bridge ネットワークでは使えません。

このため、 本構築ガイドでは docker network createで新たにosという名の仮想ネットワーク(ユーザ定義ネットワーク)を作成し、 コンテナ群は、このネットワーク os に接続するようにしています

/etc/resolv.conf

コンテナの /etc/resolv.conf は、デフォルトの bridge の場合、ホストと同じ設定が入ります。 ユーザ定義ネットワークの場合は

nameserver 127.0.0.11

となります。

ちなみに docker がコンテナイメージを改変しているのではなく、 ファイルシステムを重ね合わせることで、 これ(docker が用意した /etc/resolver.conf をコンテナイメージの上に重ね、 docker が用意した設定の方を読ませる)を実現しています (グラフィック編集ソフトがレイヤーを重ねて絵をつくる理屈と同じです。この説明でイメージが湧くかな?)。

リファレンス

Last updated on 7 Dec 2021
Published on 7 Dec 2021
Copyright (C) 2021-2022 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0
We appreciate AWS Academy Japan for the offer of the learning environment.

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.