株式会社ユーザベースの技術チームブログです。NetworkContainer技術Tweetこんにちは。SPEEDA開発チームの鈴木です。Container間通信の説明の前段として、Dockerのネットワークが次のようになっているという話をしました。Container同士の通信を実現するのかを説明していきます。Container同士が通信することを指します。図で見ると大分単純ですし、前提条件次第では実際簡単に実現できるのですが、Containerのオーケストレーションを前提におくと色々な仕組みが必要なことがわかってきます。XとYは同じネットワークに属することとします)。※以降の説明には不要なため、vethの記載は省略します。これをネットワーク的な視点で見ると、次のような感じです。Bは当然通信できます。Yまでも問題なく通信できます。Cとは通信できません。Network上に存在するからです。この問題を解決して、異なるホストのContainerと通信できるようにする方法はいくつかあります。Forwarding機能です。Forwarding機能を使うとContainerの外部からContainerにアクセスできるようになります。Forwardingが行われる設定がされていることがわかります。略この通信方法は「接続元のContainerが接続先のContainerのホストのIPを知っている」という条件のもとに成り立っています。Containerが起動するホストが動的に変わるようなケースには対応できません。逆に言えばホストが固定されていて、今後も変わらないならばこれで十分です。Networkとは、あるNetworkの上に別のNetworkを構築する技術です。異なるホストのContainer同士が通信できない原因はContainerが異なるネットワークに属していることにありました。Network構築して同じネットワークに属するようにしてしまえばいいじゃん」というのがこの方法です。Networkを使用する場合、Containerは同じネットワークに属していることになるので、異なるホストのContainerと直接通信することができるようになります。Networkの構築方法をいくつかご紹介します。Networkを利用する方法です。Networkが構築されていることがわかります。modeの登場以降は不要になっています(Dockerに組み込まれたようです)。modeがやってくれているようなことを自前でやります。modeがあるので、この方法が使われることはあまりないでしょう。Kubernetes.」とあるように、元々Kubernetes向けに作られたものです。flannelを使用する場合、次のイメージのように各ホストにflanneldとetcdをインストールします。flannelの主な役割は2つです。etcdを使ってNetwork情報を共有することで、docker0に重複しないSubNetを割り当てる。(割り当て済みのSubNetのアドレス帯を共有しているので重複を避けられる)各ホストに仮想NICflannel0を作成。Container間でpacketを送受信する際、docker0と接続されたflannel0がVXLANでpacketのカプセル化・非カプセル化を行う。VXLANでカプセル化されたpacketは次のような構造をしています。Headerまで)を付加しています。このようにあるプロトコルを別のプロトコルで包むことをカプセル化といいます。Headerの情報など)から受信したpacketがVXLANのpacketであることが判別できるので、包んでいるプロトコルを剥がして本来送信したかった宛先に送ることができます。Cにpacketを送信すると次のようにpacketが送信されていきます。NICの右側が、そのNICのpacketをキャプチャしたものです(簡略化しています)。Forwardingと同様に、Containerが起動するホストが動的に変わるようなケースには対応できません。同じネットワークに属してはいますが、同じホストに存在するわけではないので、dockerのlink機能やdocker-composeを使っての名前解決ができないからです。swarmやKubernetesなどはこの問題を解決するための仕組みをもっています。次回は、KubernetesにおけるContainerのマルチホスト間通信と合わせてこのあたりのことを書きたいと思います。Openはじめまして。(ryoqun)です。Kubernetesのネットワーク...こんにちは。SPEEDA開発チームの鈴木です。Dockerネットワークの基礎こんにちは。SPEEDA開発チームの鈴木です。調べてみるとなかな...2015-02-13Dockerコンテナを管理するならKubernetesSPEEDA開発チームの山岸です。»プロフィール『経済情報で、世界を変える』をミッションに、企業・業界情報プラットフォーム「SPEEDA」やソーシャル経済ニュース「NewsPicks」、ABMを強力にサポートする「FORCAS」、スタートアップの情報収集を圧倒的効率化「entrepedia」などを提供する株式会社ユーザベースの技術チームブログです。多国通貨」をハンズオンしたら快適で楽しかったGo言語でオブジェクト指向プログラミングの基本(型編)月別アーカイブ検索@Uzabase_Techさんのツイートスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。