どうも、nippa です。
今回は Docker の Swarm モードでコンテナ同士の通信設定をまとめたいと思います。
コンテナ同士の通信ができると、サービスごとに設定もできるため広がりが出てきます。
- 環境
- ネットワークドライバの種類
- Docker のネットワークの生成
- Swarm モードのサービス間での相互通信
- オーバーレイネットワーク上のトラフィックの暗号化
- Swarm モードのサービスごとの設定
- 感想
環境
Virtual Box 上に Linux サーバを 2 台構築
- ubuntu 20.04
- メモリ:2GB
- ストレージ: 10GB
サーバは
- Manager サーバ(manager node + work node)
- Worker サーバ(work node)
と定義します。()の中は swarm モードでの node 構成を示しています。
設定の詳細はこちらの記事に記載してあります。
ネットワークドライバの種類
Docker 公式ページで記載されているネットワークについてまとめると以下の表のようになります。
ドライバ名 | 用途 |
---|---|
bridge | デフォルトのネットワーク。アプリケーションからスタンドアロンにアクセス可能で、外部から直接コンテナにアクセスする場合はこの設定になります。 |
host | スタンドアロンコンテナとホスト間で直接通信する場合の設定で、外部からのアクセスは出来ません。 |
overlay | 複数の Docker デーモン間で相互通信可能な設定になります。Swarm モードで利サービス同士の通信を刷る場合はこの設定になります。 |
ipvlan | IPv4 と IPv6 を直接コンテナに割り振り、制御する設定になります。 |
macvlan | コンテナに物理的な Mac アドレスをを仮想的に割り振る設定になります。 |
none | ネットワーク機能をすべて無効な設定です。 |
この他に、サードパーティのプラグインをインストールすれば利用可能になります。
Docker のネットワークの生成
コンテナ間の相互通信を行うためには、overlay
ドライバを利用します。
docker のネットワークの生成は下記のコマンドで行います。
docker network create -d [ドライバ名] [ネットワーク名]
Swarm モードのサービス間での相互通信
まず、overlay
ドライバでのネットワークを生成します。
Swarm モードのサービス間の通信の場合は、以下のオプションで作成します。
docker network create -d overlay [ネットワーク名]
スタンドアロンコンテナをネットワークに接続する場合には--attachable
オプションをつけて、ネットワークを生成します。
docker network create -d overlay --attachable [ネットワーク名]
今回は IP アドレスの範囲指定や、サブネット、ゲートウェイについては指定しません。
必要な場合はdocker network create --help
でオプションを確認できますので、用途に合わせて設定してください。
オーバーレイネットワーク上のトラフィックの暗号化
トラフィックの暗号化が必要な場合は、--opt encrypted
オプションを利用することで暗号化可能です。
12 時間ごとに鍵が変更される仕様になっています。
ただし、Windows 上ではサポートされていない機能ですので、ご注意ください。
docker network create -d overlay --opt encrypted --attachable [ネットワーク名]
Swarm モードのサービスごとの設定
Swarm モードのサービスごとに公開ポートの設定が必要になります。
公開ポートが 8080 で、内部のサービスポートが 80 で、通信方式が TCP の場合、次のコマンドでポートの設定が可能です。
# サービスの生成 docker service create -p 8080:80/tcp [サービス名] # サービスの更新 docker service update -p 8080:80/tcp [サービス名]
この書き方は複数ありますので、Docker 公式でご確認ください。
感想
今回ネットワークの設定方法をまとめましたので、実際に設定してコンテナ間の通信をしてみたいと思います。
ではでは、また次回。