【docker network】Dockerコンテナのネットワークまとめ【コンテナ間通信・名前解決】

Dockerは、ユーザーが作成したDocker networkを使うことにより、同一のnetworkに接続されたコンテナ間で、コンテナ名で名前解決をして相互通信することが可能です!

今回は、そのDocker networkに関するコマンドや知識をまとめます!

Dockerコンテナの名前解決

DockerコンテナにはNAME(名前)をつけることができます。

上記コマンドを実行することで、alpineイメージを元にapp_1というNAMEのコンテナを起動することができます。

このコンテナは、Docker networkを指定してコンテナを起動したわけではないので、defaultで接続されるbridgeネットワークに接続されます。

defaultネットワークに接続されたコンテナ同士はコンテナ名で通信をすることができません。

しかし、ユーザー定義ネットワークに接続されたDockerコンテナ同士は、名前で通信することができます!

ネットワークの作成と確認

Dockerネットワークの新規作成は以下のコマンドで行います。

上記コマンドを実行後、以下のネットワーク一覧コマンドを実行することにより、app_networkという名前でbridge DRIVERのネットワークが作成されたことが確認できます。

Dockerコンテナのネットワークへの接続

これで、Dockerコンテナ(app_1)とDockerネットワーク(app_network)が作成されました。

app_1コンテナはdefaultのネットワークであるbridgeネットワークに接続されているため、app_networkに接続しなければなりません。

上記コマンドを実行することによって、app_1コンテナをapp_networkに接続することができました。

試しに以下のコマンドを実行して、networkの詳細を見てみましょう.

上記コマンドを実行すると、networkの詳細が確認できます。

詳細の中に、Containersの欄があり、その中に、app_1コンテナが含まれていることをが確認できます。

※コンテナが起動中でないと確認できません。

これで、app_1コンテナはapp_network内のコンテナとNAMEで通信ができるようになりました。

コンテナ間で通信してみよう!

同一ネットワークにもう一つコンテナを追加して、コンテナ間で通信する実験をしてみましょう!

上記のように、【–net】オプションを使えば、ネットワークに接続した状態のDockerコンテナを起動することができます。

それでは、app_1コンテナに入って、app_2コンテナと通信してみましょう。

  • 1行目で、app_1コンテナに入る
  • 2行目で、app_2コンテナにpingを飛ばす

この結果、pingで通信が成功することが確認できるかと思います!

同一networkのコンテナ間でコンテナ名で名前解決して通信する方法でした!

ABOUTこの記事をかいた人

新卒でノマドワーカー(webデザイナー)として独立し、半年で月収100万円を達成する。その後、事務所を売却(バイアウト)したり、Youtuber(最高月間視聴回数109万回、チャンネル登録者1万人)をしたり、Openrecの公式配信者としてゲーム生実況をしたり、ベンチャー企業のCOOをしたり、パラレルキャリアを歩んできました。 2019年にミニマムライフコストを不労所得で稼げるようになったため、いまは、お金のことを考えずに、様々な企業でエンジニア修行をさせていただきながら、複数のメディアやアプリとweb制作事務所を運営しています。 趣味は株式投資(米国・日本株メイン)で、トレードを楽しむ日も多いです!