1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Docker】ネットワークについての概要 no.20

Posted at

パンプキン カフェ (9).png

こんにちは。まゆみです。

Docker についての記事をシリーズで書いています。

今回の記事では、Dockerのネットワークについての簡単なまとめ記事を書いていこうと思います

リアルなアプリケーション開発では、1つだけのコンテナではなく、2つ以上のコンテナを相互にコミュニケーションを取らせて開発していくことが多くなってくると思います

そこで

  • WWWを使って外部とつながる時
  • ホストマシーンとつながる時
  • ほかのコンテナとつながる時

に分けて解説していきます。

では、はじめていきますね。

#WWWで外部とつながる時

Containerの中からWWWで外部とつながりたい時(例えばAPIを使用したい時)は、とても簡単です。

何も特にする事なく、APIを使うことができます

#ローカルホストとつながる時

例えば、ローカルホストにデータベースを置いて、それをContainerとつなげたい時。

特別のドメインである(host.docker.internal)を使います。

例えば、node.jsとmongodbを使ったアプリを開発している時、下のコードの<つなげたい先>と書いているところをhost.docker.internalに変えます。

mongoose.connect("mongodb://<つなげたい先>")

docker docsドキュメントで確認したい方はこちらからどうぞ

#他のContainerとつながる時

Containerを作る時のベストプラクティスは

1つのContainerにつき1つのタスク

と言われています。(WebサーバーのContainer, データベースのContainerでそれぞれ別個のContainerを作る)

それゆえ、アプリ開発においては、複数のContainerを作りそれらをつなげて使うという場面が多くなります。

今回の記事では、node.appとmonogodbを組み合わせてアプリを作るということを想定して

ContainerとContainerをつなげるため

にはどうしたらいいのか書いていきます

node app.png

2つ以上のContainerをつなげる方法は2つあります

2つの選択肢を別々に下記に書いていきますね。

##IPアドレスを使って他のContainerとつながる

Docker hub にオフィシャルのmongoイメージがあるので、Dockerfileから作るのではなくオフィシャルのImageを使います

2021-06-27_11-08-12.png

docker run -d --name mongodb mongo

ディタッチモードでmongo Image からcontainer を作りました。

バックグラウンドでmongoが実行中になりますから、そのまま

docker container inspect mongodb

で詳細を見てください。

すると、たくさんの情報が出てきますので、その中の『"NetworkSetting" > "IPADDRESS"』

を見つけてください。(下のスクショ参考)

2021-06-28_13-01-43.png

ソースコードのアドレスを表しているところに貼り付けます

2021-06-28_13-03-46.png

これで、このIPアドレスを使ってmongodbのContainerとつながることができます

ただ、IPアドレスを調べないといけなかったりして面倒くさいですよね。

他のContainerをつながる方法はもう一つあります。

下記にその方法を書いていきます

#同じネットワークに入れる

ContainerとContainerをつなぐもう一つの方法は、つなげたいContainerを同じネットワークに入れることです。

2つ以上のContainerを同じネットワークに入れるには『--network』を使います

##networkを作る

--networkオプションを使えば、2つ以上のContainerを同じnetworkに入れることができると言いましたが、 その前にnetwork自体を作らなければいけません。

docker network create <好きな名前>

とコマンドを打ち、まずネットワークを作ってください。

その後

docker run --name <containerの名前> --network <ネットワークの名前> <ImageID>

とします(ちなみに--nameオプションでContainerに名前を付けることができます。次のプロセスでcontainerの名前が必要なのでContainer名を覚えておいてください。)

実際にコマンドを実行した様子は下のスクショになります

2021-06-28_15-14-07.png

これでmongodbのContainerが起動しました。

その後、このmongodbのContainerとnodeアプリをつなげるため、下記のようにコードを書き換えます。

2021-06-28_13-46-40.png

上のスクショの赤で囲まれた部分に先ほどrunする時に--name オプションによって付けたContainerの名前を入れてください。

2つ以上のContainerを同じネットワーク内に入れることで、『Containerの名前によって』Container同士をつなげることができるようになります

今回は2つのContainerをつなげるので、同じネットワーク内(--network my-netのオプションをつけて)2つのContainerを実行しました(下のスクショ参考)

2021-06-28_15-33-50.png

docker logs で上のようなWarningが出ればうまく行っています。

同じネットワーク内のContainerをつなぐには『-p』を使うのではなく、『container名』によって認識させます。

#まとめ

今回の記事は、mongodbの知識が少し必要だったりして、記事をまとめるのに少し時間がかかりました。(mongoose.connectの使い方が分かればスムーズに記事を読めると思います)

ただ、実際の現場では2つ以上のContainer同士、お互いコミュニケーションを取らせて開発する事が多くなると思います。

今回の記事が、少しでもお役に立てれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?