「docker ps」などのコマンドでdockerコンテナを単一で作ることはできるけれどコンテナ同士(例えばWebコンテナとDBコンテナ)を連携させるにはどうしたら良いんだろう?と考えている人向けです。
1つのコンテナの中に全機能入れたら良いじゃんと思うかもしれませんがそうは問屋が下ろしません。
一般的にwebサーバーは外部ネットワークに晒されますが、DBサーバーなどの内部サーバーはセキュリティの観点から内部ネットワーク内に入れられているということが多いのです。
そこで今回はドッカーのネットワークのまとめとなります。
公式リファレンスの以下の項目を参考に作成しています。 コンテナのネットワーク — Docker-docs-ja 19.03 ドキュメント
ネットワークの作成
以下のコマンドで作成します。
docker network create -d bridge <ネットワーク名>
-dオプションで指定するのはネットワークドライバです。
ネットワークドライバは自分で作成することもできますが、一般的にはサポートしている以下の2種類から選んで指定します。
- Overlay
- bridge
ちなみにネットワークの一覧は以下のようにして確認することができます。
docker network ls
また、ネットワークの詳細情報はお馴染みのinspectコマンドで確認できます。
docker network inspect <ネットワーク名>
コンテナをネットワークに入れる
さて、コンテナを連携させる時に便利な方法として連携させたいコンテナを同一ネットワーク内に入れてしますという方法があります。
こうすることで何が便利になるかというとコンテナのIPではなく、コンテナ名で名前解決をすることができるようになるのです。
以下のようにdocker run実行時に--netオプションにネットワーク名を指定することで作成したコンテナをネットワークに追加することができます。 また、--nameオプションでコンテナに名前をつけることができます。未指定だと勝手な名前がつきます。
docker run -d --net=<ネットワーク名> --name <コンテナ名> <イメージ名>
以下のように追加します。