はじめに
Dockerを使ってアプリケーションをコンテナ化すると、複数のコンテナを連携させる場面が必ず出てきます。例えば、Nginxがフロントエンドを担当し、バックエンドのAPIサーバやデータベースと通信する、といった構成です。
こうした連携をスムーズに行うために重要なのが「ネットワーク構築」です。
Dockerにはデフォルトでネットワークが用意されていますが、実際のシステム開発や運用ではカスタムネットワークを作成し、コンテナ間通信を制御することが推奨されます。本記事では、Dockerネットワークの基礎を押さえつつ、実際に手を動かしてネットワークを構築する方法を解説します。
Dockerネットワークの種類
Dockerにはいくつかのネットワークモードが用意されています。それぞれ特徴があるため、用途に応じて選択します。
- bridge:
デフォルトで利用されるネットワーク。コンテナ間通信を行う際に最も一般的に使用されます。 - host:
コンテナがホストのネットワークスタックを直接使用します。パフォーマンス面で有利ですが、隔離性が低くなります。 - none:
ネットワークに接続しない完全な隔離モードです。 - overlay:
Docker Swarmなど、複数ホスト間でコンテナをつなげるための分散ネットワーク。 - macvlan:
コンテナに直接MACアドレスを割り当て、物理ネットワークに接続する高度な方式。
今回は最もよく使われる bridgeネットワーク を対象に、実際にハンズオン形式でネットワーク構築を学んでいきます。
ハンズオン ― カスタムネットワークを作る
ステップ1: ネットワークを作成
まずは独自のbridgeネットワークを作成してみましょう。
docker network create my_network
作成したネットワークを確認するには以下を実行します。
docker network ls
my_network
がリストに追加されていれば成功です。
ステップ2: コンテナをネットワークに接続
次に、Alpine Linuxベースの軽量コンテナを2つ立ち上げて、同じネットワークに接続してみます。
docker run -dit --name app1 --network my_network alpine sh
docker run -dit --name app2 --network my_network alpine sh
ステップ3: コンテナ間通信を確認
コンテナapp1
からapp2
に向けてpingを実行してみます。
docker exec -it app1 ping app2
正常に通信できれば、ネットワーク構築ができている証拠です。Dockerのネットワークでは、IPアドレスではなくコンテナ名で通信できるのがポイントです。
Webアプリ連携の例
実際のアプリケーション連携の例として、Nginxとバックエンドを同じネットワークに接続してみます。
docker run -dit --name web --network my_network nginx
docker run -dit --name backend --network my_network alpine sh
このとき、Nginxの設定で backend
を指定すれば、Nginxは名前解決を通してバックエンドにリクエストを送ることができます。IPアドレスを固定する必要がなく、システム構築が柔軟になります。
トラブルシューティングのポイント
Dockerネットワークを扱う際によくあるトラブルと解決のヒントをまとめます。
- 通信できない場合
→ コンテナが同じネットワークに属しているか確認する - 名前解決できない場合
→--network
オプションを付け忘れていないかチェック - 複数ネットワークを扱う場合
→docker network connect
コマンドで追加のネットワーク接続が可能
まとめ
本記事では、Dockerネットワークの基礎とカスタムネットワークの作成方法をハンズオンで解説しました。
- Dockerには複数のネットワークモードが存在する
- bridgeネットワークを使えば、コンテナ名で通信が可能になる
- 実際のWebアプリ連携にも応用できる
これらを押さえることで、より柔軟なコンテナ間通信の設計が可能になります。
次のステップ
今回のハンズオンはDockerネットワークの基礎を押さえるものでした。さらに実践的な運用を目指す方は、以下のステップに進んでみてください。
- Docker Composeでネットワークを定義する
→docker-compose.yml
内でサービスごとにネットワークを指定すれば、構築が自動化できます。 - Overlayネットワークでマルチホスト通信を実現
→ SwarmやKubernetesなど、分散環境に挑戦するとスケーラブルな構成に繋がります。 - macvlanで物理ネットワークと統合
→ IoTやオンプレ環境など、物理ネットワークと直結するユースケースにも対応可能です。
コメントを残す