Dockerとコンテナ技術 その16:bridgeネットワークによるコンテナ通信

以前の記事でDockerネットワークという機能についてまとめました。

キョウタコの技術日記

コンテナは一つのシステム内で、その用途ごとに分けて複数作成するのが一般的です。例えばWebサーバーのコンテナとDBサーバ…

Dockerでサービスやアプリを作成する場合、webサーバーやDBサーバーなどの機能ごとにコンテナを作成しコンテナ間で通信を行うように構成されることが多いです。
また、コンテナによって外部のアクセスを許可するか拒否するかの制御を行ったり、特定のコンテナとしか通信できないようにするなど、様々なアクセス制御が必要になります。

今回の記事ではこれら実現するための、bridgeネットワークでの接続方法について詳しくまとめていきます。

Dockerネットワークとは?

Dockerネットワークの概要

Dockerはコンテナ同士の通信を制御するためにDockerネットワークという機能を用意しています。
Dockerネットワークを使用することで、コンテナ同士の通信を可能にすることや、逆に制限をかけて通信できないようにすることができます。

デフォルトのネットワーク

コマンドを使うことで現在存在するDockerネットワークを見ることができます。
まずは何もしていない状態で以下のコマンドを実行してみましょう。

docker network ls

実行後、以下のように表示されると思います。

何もしていない人でもすでに3つのネットワークが存在します。
これらはDockerがデフォルトで用意しているネットワークになります。
それぞれの概要については記事の冒頭で紹介した過去記事にまとめているので確認してみてください。
今回はbridgeネットワークが重要な要素となります。

bridgeネットワークの概要

bridgeネットワークとはコンテナ間の通信の橋渡しをするネットワークのことです。
同一のbridgeネットワークに接続されたコンテナ間では通信が可能になります。
異なるbridgeネットワークのコンテナ間では通信できません。
bridgeネットワークはデフォルトで用意されたものだけでなく、自分で作成することもできます。
ネットワークを自作することで、隔離された安全なネットワークを構築することができます。

bridgeネットワークにコンテナを接続する

では、実際にbridgeネットワークへのコンテナ接続をしてみましょう。

デフォルトのbridgeネットワークに接続する

では、まずはデフォルトのbridgeネットワークに接続していきましょう。
とはいうものの、ネットワークを特に指定しない場合はデフォルトのbridgeネットワークに接続されるので特に新たにやることはありません。
コンテナを起動する前にbridgeネットワークの詳細を確認してみましょう。
以下のコマンドを実行してください。

docker network inspect bridge

このコマンドは指定したネットワークの詳細を表示するコマンドです。
実行すると以下のように表示されます。

下から三番目の項目のContainersを見てみると、空の配列が表示されています。
つまり、現状でbridgeネットワークに接続されているコンテナはないということになります。
では、適当なコンテナを起動していきましょう。

docker container run -itd --rm --name my-nginx-1 nginx

実行後、再度bridgeネットワークの詳細を表示してみましょう。

先ほどは空だったContainersに先ほど起動したコンテナが追加されています。
このように特に何も指定しないとコンテナはデフォルトのbridgeネットワークに接続されます。

カスタムbridgeネットワークにコンテナを接続する

では次に、bridgeネットワークを作成しそこにコンテナを接続していきましょう。
まずはネットワークを作成します。
以下のコマンドを実行してください。

docker network create my-net-1

実行すると以下のようになり、指定した名前で新しいネットワークが作成されます。

次にコンテナ起動時にオプションを指定してカスタムネットワークにコンテナを接続します。
以下のコマンドを実行してください。

docker container run -itd --rm --name my-nginx-2 --network my-net-1 nginx

--networkオプションを追加しており、コンテナを接続するネットワーク名を指定しています。
では、my-net-1の詳細を表示し接続を確認してみましょう。
以下のコマンドを実行してください。

docker network inspect my-net-1

実行後以下のように表示されると思います。

Containersに先ほど起動したmy-nginx-2コンテナが記述されており、接続を確認できました。

まとめ

コンテナのネットワーク接続はアプリ開発においても重要な知識です。
特に最近は機能ごとにコンテナを分離させることが当たり前になっているので、安全なアプリを作成するためにもネットワークの知識はしっかりと覚えておきましょう。
次回の記事ではbridgeネットワーク内での通信についてまとめていきたいと思います。
ここまで読んでいただきありがとうございました。
それでは、また。