7.1 Overlayネットワークの学習 overlay
ネットワーク overlay — これは分散型Dockerネットワークで、異なるホスト上で動作するコンテナ同士が通信できるようになるんだ。これって、Docker SwarmやKubernetesみたいなコンテナのオーケストレーションをする際に、異なるノードで動作するコンテナ間の接続を確保するのに頻繁に使われるよ。このレクチャーでは、overlayネットワークを作成して使う方法だけじゃなくて、これを使った例も見ていこう!
ネットワーク overlayは、既存のネットワーク上に仮想分散ネットワークを作成し、複数のホストを1つのネットワーク空間に統合するんだ。これによって、ホストの物理的な位置に関係なく、全てのコンテナがまるで同じローカルネットワークにいるかのように動作できるんだよ。
overlayネットワークを使うメリット:
- 異なるホスト間のコンテナ通信: 異なるノード上で動作しているコンテナ同士のネットワーク通信を確保するんだ。
- 分離性: 異なるアプリケーション用の隔離されたネットワークスペースを作れるよ。
- スケーラビリティ: ノードの動的な追加や削除が、作業を中断することなく行えるんだよね。
7.2 overlay ネットワークの作成
overlay ネットワークを作成するには、まずDocker Swarm クラスターを初期化する必要があるよ。それによってマネージャーノードが作成されて、分散ネットワークを作成できるようになるんだ。
手順1: Docker Swarm の初期化
クラスターのマネージャーとなるホストでコマンドを実行してね。このコマンドによってSwarm クラスターが初期化され、他のノードをクラスターに参加させるためのコマンドが表示されるよ。
docker swarm init
手順2: 作業ノードをクラスターに参加させる
他のホストでdocker swarm init が出力したコマンドを実行して、そのホストをクラスターに参加させてね。コマンドの例は以下だよ:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
手順3: overlay ネットワークを作成する
クラスターが初期化されたら、以下のコマンドを使ってoverlay ネットワークを作成しよう:
docker network create -d overlay my_overlay_network
手順4: ネットワークの確認
ネットワークが正常に作成されたかどうかを確認するには、docker network ls コマンドを実行してね。このコマンドは全てのネットワークのリストを出力して、新しいoverlay ネットワークも含まれているよ。
docker network ls
出力例:
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5 my_overlay_network overlay swarm
これでmy_overlay_network ネットワークが分散アプリケーションで使用できる状態になったよ。
7.3 overlayネットワークの使い方
ネットワークを作成したので、これでコンテナやサービスをこのネットワークに接続して実行できるよ。
サービスにおけるoverlayネットワークの使用例
Docker Swarmでは、サービスを使ってコンテナを管理することができるんだ。いくつかのサービスを作成して、それらをoverlayネットワークに接続しよう。
ステップ 1: ウェブサーバーサービスの作成
docker service create --name webserver --network my_overlay_network -p 8080:80 nginx
このコマンドはwebserverサービスを作成して、ネットワークmy_overlay_networkに接続するよ。ウェブサーバーはhttp://localhost:8080でアクセスできる。
ステップ 2: データベースサービスの作成
docker service create --name database --network my_overlay_network -e POSTGRES_PASSWORD=mysecretpassword postgres
ここで、同じネットワークに接続されたdatabaseサービスを作成するよ。環境変数POSTGRES_PASSWORDも設定しよう。
ステップ 3: サービス間の接続確認
接続確認には、一時的なコンテナを起動して試してみよう:
docker run -it --network my_overlay_network busybox
コンテナ内でpingコマンドを使って、ウェブサーバーやデータベースへの接続を確認してみてね:
ping webserver
ping database
設定が正しく行われていれば、pingが成功したことを示して、コンテナがホスト名を使ってやり取りできることを確認できるよ。
ステップ 4: サービスのステータスを確認
コマンドdocker service lsを使って、作成されたサービスのステータスを確認しよう:
docker service ls
期待される出力では、起動中のサービスの情報、ステータス、複製数を表示するよ。
注意: overlayネットワークは、複数のホストに接続されたコンテナ間でデータのやり取りを可能にするんだ。これには同じSwarmクラスタに接続している必要があるよ。
7.4 overlay ネットワークを Docker Compose で使用する例
Docker Compose は複数コンテナのアプリケーションやネットワークの管理を簡素化するよ。 docker-compose.yml ファイルで overlay ネットワークを定義して、そのネットワークを使ってコンテナ間をつなげることができるんだ。
docker-compose.yml ファイルの例:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
networks:
- my_overlay_network
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: mysecretpassword
networks:
- my_overlay_network
networks:
my_overlay_network:
driver: overlay
attachable: true
Docker Compose の起動:
docker stack deploy -c docker-compose.yml mystack
このコマンドは docker-compose.yml ファイルを使ってスタックをデプロイし、ネットワーク my_overlay_network に接続されたサービスを作成するよ。
実践的なヒント:
- ネットワークのモニタリング: Docker Swarm のモニタリングツール(例えば Docker Dashboard や Prometheus)を使って、ネットワークの状態やコンテナ間のやり取りを追跡しよう。
- スケーラビリティの管理: Overlay ネットワークはノードの動的追加や削除をサポートしてるよ。アプリケーションをスケールさせるために、ネットワークリソースを正しく設定しよう。
- 構成のバックアップ: 障害が発生した場合に素早く復旧できるように、ネットワークやスタックの設定を定期的に保存しよう。
GO TO FULL VERSION