IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Docker Swarmモードのネットワーク設定

どうも、nippa です。

今回は Docker の Swarm モードでコンテナ同士の通信設定をまとめたいと思います。

コンテナ同士の通信ができると、サービスごとに設定もできるため広がりが出てきます。

環境

Virtual Box 上に Linux サーバを 2 台構築

  • ubuntu 20.04
  • メモリ:2GB
  • ストレージ: 10GB

サーバは

  • Manager サーバ(manager node + work node)
  • Worker サーバ(work node)

と定義します。()の中は swarm モードでの node 構成を示しています。

設定の詳細はこちらの記事に記載してあります。

timesaving.hatenablog.com

ネットワークドライバの種類

Docker 公式ページで記載されているネットワークについてまとめると以下の表のようになります。

ドライバ名 用途
bridge デフォルトのネットワーク。アプリケーションからスタンドアロンにアクセス可能で、外部から直接コンテナにアクセスする場合はこの設定になります。
host スタンドアロンコンテナとホスト間で直接通信する場合の設定で、外部からのアクセスは出来ません。
overlay 複数の Docker デーモン間で相互通信可能な設定になります。Swarm モードで利サービス同士の通信を刷る場合はこの設定になります。
ipvlan IPv4IPv6 を直接コンテナに割り振り、制御する設定になります。
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 公式でご確認ください。

感想

今回ネットワークの設定方法をまとめましたので、実際に設定してコンテナ間の通信をしてみたいと思います。

ではでは、また次回。