私はドッカーを初めて使用し、単一のサーバーですべてのアプリケーションをドッカー化しています。これまでのところ、すべてがうまく機能しています。しかし、私は一つのことを理解していません。私はすべてにdocker-composeを使用しています(プロジェクト用のdockerfileはまだ作成していません)。docker ports
-composeにはこの属性があります。このようなものを書くと:
ports:
8085:80
0.0.0.0:8085 でリッスンします。これは、外部からサーバーにアクセスできることを意味します。いくつかの議論とグーグル検索の後、docker bridge ネットワークで IP アドレスを取得し、ポート マッピングを簡単に実行できることがわかりました。
ports:
172.17.0.1:8085:80
これは 172.17.0.1:8085 でのみリッスンします。これは、内部でのみリッスンし、nginx がトラフィックを必要なポートにプロキシするため、優れています。(例proxy_pass http://172.17.0.1:8085
)。docker について詳しく知り、それらがどのように機能するかを理解した後、これらのコンテナーにはすべて独自の IP アドレスがあり、ポートはそれらのアドレスにのみ公開されていることに気付きました。たとえば、私の「Web」コンテナーの 1 つに 172.17.0.10 の IPv4 アドレスがあり、ポート 80 が公開されています。これらのコンテナーのいずれかで実行docker inspect
すると、コンテナーの IP アドレスが表示されます。
ここで、これらの IP アドレスを nginx で使用したいと考えています。の代わりにproxy_pass http://172.17.0.1:8085
、やりたいhttp://172.17.0.10
。個人的にはとても洗練されたインターフェイスだと思いますが、気になる点が 1 つあります。マシンを再起動するとどうなりますか? すべてのコンテナは、何らかの順序で開始されます。5 つの Web コンテナーがあり、それらがランダムな順序で開始される場合、これらのコンテナーの IP が同じであることを確認できますか? それとも変わるのでしょうか?ports
nginx で使用するために docker-compose で常に使用する必要がありますか? はいの場合、同じ IP を持つ異なるポートではなく、コンテナーごとに異なる IP を使用するにはどうすればよいですか? 別の docker ネットワーク インターフェイス (サブネット 172.17.1.0 としましょう) を作成し、そのインターフェイスから別の IP を公開された「パブリック」ポートに割り当てても問題ありませんか? これは基本的172.17.1.1:80:80
に 1 つのコンテナで使用することを意味し、172.17.1.2:80:80
別などで