異なるIPアドレスで複数のDockerコンテナを実行する方法
Dockerは、サーバーレスクラウドソリューションを使用してアプリを実行するのを簡単にしますが、多くの人は少数の強力なマシン上で複数のコンテナを管理することを好むでしょう。この場合、複数のIPアドレスを使用することは、同じポートで複数のサービスを管理するのに素晴らしい方法になる可能性があります。
ネットワークインターフェースはどのように機能しますか?
Linuxは物理ハードウェアを表現するためにネットワークインターフェースを使用し、VLAN、ブリッジ、またはエイリアスのような仮想ネットワーキングコンポーネントを作成します。システム上のすべてのデバイスをリスト表示する場合は、
ip addr showさまざまなインターフェースが見つかります。
eth0と
eno1
実際の接続を表すものです。
IPアドレスはネットワークインターフェイスとは別のシステムですが、本質的には、1つのインターフェイスに複数のIPアドレスを設定できるため、各ネットワークソケットにサービスをバインドすることができます。
IP:PORT組み合わせ。
これはDockerと良く機能します。Dockerは、アプリケーションレベルではなく、Dockerレベルでネットワーキングを処理できるようにします。Dockerを使用することで、コンテナ内のアプリケーションは「ポート80」にバインドでき、そのポートはDockerによってホスト上の特定のIPアドレスにマッピングされます。
これにより、アプリケーション層とそれを実行しているホストを分離することがはるかに簡単になります。例えば、同じマシン上で複数の異なるAPIサービスを実行し、基盤となるコンテナの設定を行うことなく運用することができます。
Dockerにとっては、IPアドレスがどのシステムインターフェースにあるかはそれほど重要ではありません。正しい設定でコンテナを起動すれば、Dockerの内部ネットワーキングがこれを処理してくれます。
同じサーバーで複数のDockerサービスを実行する
特定のアドレスでコンテナを実行するのは、起動方法によってかなり簡単です。基本的に、ほとんどのDockerコンテナはそのポートが設定されています。
host:containerフォーマット。例えば、
5000:80コンテナのポート80を使用し、それをホストのポート5000から利用できるようにします。
しかし、実際にはソケットを直接バインドすることができ、つまり、...する代わりに
5000、代わりに使用できます
IP:PORTペアを作り、全体のバインディングに三つのコロンを使用します:
docker run -it -d ipaddress:hostport:containerport --name web nginx例えば、異なるIP上に2つのNGINXコンテナを持つことができます。以下のように(Dockerでは別々のコンテナ名が必要ですので注意してください):
docker run -it -d 123.0.0.1:80:80 --name web nginx
docker run -it -d 123.0.0.2:80:80 --name web2 nginx
Docker Composeを使用している場合、設定は類似しています。サービスのportsセクションでは、特定のアドレスにバインドするために同じ構文を使用できます。
version: "3"
services:
nginx:
image: nginx
restart: always
ports:
- "123.0.0.1:80:80"
いずれの場合でも、サービスが同じIPアドレスでリスンしない限り、ホストポート80にバウンドされた複数のサービスを作成できます。
ただし、これを行っている場合は、コンテナがポートだけをリッスンしていないことを確認する必要があります。これは誤った設定であり、IPアドレスを省略すると、そのインターフェースのすべてのアドレスでリッスンすることを意味します。
複数のIPアドレスを取得するにはどうすればいいですか?
ほとんどのサーバーは単一のIPアドレスしか持っていないため、追加のものを自分で設定する必要があるかもしれません。
サーバーごとに複数のIPを設定することは、使用しているホストによって異なります。たとえば、AWSは「Elastic IP」サービスを提供しており、一台のマシンにつき一つのIPを使用する場合は無料です。ただし、追加のElastic IPアドレスを購入したい場合は、それらを任意のサーバーに関連付けることができます。各IPアドレスにつき月額3.65ドルを支払うことになります。
いくつかのサービスでは、一度限りのIPアドレスの購入を許可しており、OVHのように/24サイズのブロックまでの購入が可能です。
実際に所有するために大きな連続したIPアドレスのブロックを購入したい場合は、さまざまなブローカーを通じて行うことができますが、これは一般的に大きな手数料がかかり、主に大規模な組織向けです。
IPアドレスを取得したら、それをあなたのアドレスに向けるのはクラウドプロバイダーの仕事です。ただし、それを使用するためにネットワークインターフェースを設定するのはあなたの責任であり、netplanのようなツールを使用する必要があります。


