最近、ドッカースタックをセットアップして実行する方法についてたくさん読んでいます。しかし、私がいつも見逃していることの1つは、特定のコンテナーが、docker dnsを使用してコンテナー名だけでなくドメイン名を介してアクセスに応答するように設定する方法です。
つまり、users.mycompany.comのように外部からアクセスできるマイクロサービスがある場合、ユーザーAPIを処理するマイクロサービスコンテナーに移動します
次に、customer-list.mycompany.comにアクセスしようとすると、顧客リストを処理しているマイクロサービスコンテナーに移動します
もちろん、docker dnsを使用してそれらにアクセスし、それらをdockerネットワークにリンクできますが、これはコンテナーからコンテナーにアクセスする場合にのみ有効であり、インターネットからコンテナーにはアクセスしない場合にのみ有効です。
誰が私がそれをどのように行うべきか知っていますか?またはそれを設定する最良の方法。
そのため、コンテナからのポートにホストからのポートを介してアクセスできるように、ポート公開の概念を使用する必要があります。これを使用すると、Nginxから単純なproxy_passをセットアップできます。リダイレクトしますusers.mycompany.com
からmyhost:1337
(あなたがあなたのポートを1337
)
そのため、これを行うには、次を使用して特定のポートを公開するようにコンテナをセットアップする必要があります。
docker run -d -p 5000:5000 training/webapp # publish image port 5000 to Host port 5000
ホストからcurllocalhost:5000
コンテナにアクセスします。
curl -X GET localhost:5000
ドメイン名を前に設定する場合は、コンテナへのホスト名をproxy_passできるWebサーバーインスタンスが必要です。
すなわち、inNginx:
server {
listen 80;
server_name users.mycompany.com;
location / {
proxy_pass http://localhost:5000;
}
}
このチュートリアル に従うこと、そして docker run reference を確認することをお勧めします。
私が知っている限りでは、Dockerはすぐにこの機能を提供しません。しかし、確かにいくつかの回避策があります。実際、コンテナを区別し、動的IPでドメイン名を解決するDNSをホストに展開する必要があります。だからあなたは試してみることができます:
いくつかのDocker対応DNSソリューションを展開します(SkyDNSv1/SkyDock)を使用することをお勧めします。
このDNSで動作するようにホストを設定します(デフォルトではSkyDNSは名前でコンテナーを相互に認識させますが、ホストはそれを認識しません)。
明示的な--hostname
でコンテナを実行します(おそらくスキームcontainer_name.image_name.dev.skydns.local
を使用します)
ステップ#2をスキップして、コンテナー内でブラウザーを実行することもできます。ホスト名でWebアプリケーションコンテナーを検出します。