第29回 Docker Networkingの基礎知識 標準的なネットワークを理解する:古賀政純の「攻めのITのためのDocker塾」(4/5 ページ)
引き続きDocker環境におけるネットワーキングの基礎を解説します。今回は、Dockerでの標準的なネットワークを例に、手順を交えながらその構成がどうなっているのかを理解していきましょう。
Dockerコンテナに割り当てられるIPアドレスを調べる
次に、docker0ブリッジネットワークに所属するDockerコンテナに割り当てられているIPアドレスを確認してみましょう。まずは、CentOS 7.2のOSテンプレートイメージからdockerコンテナを起動します。コンテナ名は「test01」としました。
# docker run -itd --name test01 centos:centos7.2.1511 /bin/bash
起動したDockerコンテナtest01のIPアドレスを確認してみます。
# docker exec -it test01 /bin/bash [root@1c8ff583d95f /]# export http_proxy=http://proxy.yoursite.com:8080 ←プロキシサーバの設定 [root@1c8ff583d95f /]# yum install -y iproute ←ipコマンドのインストール [root@1c8ff583d95f /]# ip a ←ipコマンドでDockerコンテナに付与されたIPアドレスを確認 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo ... 6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 scope global eth0 ←付与されたIPアドレス ...
Dockerコンテナtest01に、172.17.0.2/16が自動的に割り当てられていることが分かります。ホストOS上で提供されるNATにより、172.17.0.0/16に所属するDockerコンテナが送信するパケットは、ホストOSのeth0を経由して外部と通信することになります。
バーチャルイーサネットって何?
Dockerコンテナが起動した状態で、ホストOSのネットワークはどんな状態でしょうか。ホストOSで再び「ip a」を入力してみてください。
# ip a ... 7: vethc06ae92@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP link/ether 76:ab:10:43:ae:91 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::74ab:10ff:fe43:ae91/64 scope link valid_lft forever preferred_lft forever
すると、先ほどのDockerホスト上で確認した出力に加え、なにやら新たに「vethXXXXXXXXXX」というインタフェースが生成されていると思います。このインタフェースは、「バーチャルイーサネット」(Virtual Ethernet、通称veth)と呼ばれる、Dockerコンテナ内のeth0と通信を行うための仮想的なレイヤ2のインタフェースです。Dockerコンテナ側のeth0とveth同士は、仮想的なスイッチを経由せずにLANケーブルで直接接続されていると考えて差し支えありません。Dockerコンテナが生成されるたびに、eth0と直結の内部的な仮想インタフェースのvethが生成されます。
では、このホストOS上に現れたvethは、どのインタフェースと接続されているのでしょうか。Dockerコンテナのeth0は、docker0ブリッジを経由して外部にアクセスできます。しかし、Dockerコンテナが生成されるたびにホストOS上にvethが生成され、しかもvethは、Dockerコンテナ内のeth0と直結です。実は、Dockerコンテナ側のeth0がdocker0を経由して外部とアクセスするには、Dockerコンテナ側のeth0がホストOS上のvethと接続し、さらにvethがdocker0と接続されていないと、外部とは通信できません。すなわち、docker0ブリッジインタフェースは、vethと接続されている必要があります。
関連記事
- 第28回 Docker Networkingの基礎知識 ソフトウェア定義型時代の到来
今回からDocker環境のネットワーキングに迫ります。ネットワーキングと聞くと、とても難解なイメージがあるかもしれませんが要素技術は非常に重要です。従来の物理システムと異なる点もあるDockerのネットワーキングについて、まずは基本を解説します。 - 第20回 Dockerで3Dゲームを動かす――準備編
非常に深い関係にあるゲームとコンピュータ。今回からDockerの環境で3Dゲームを稼働させる方法についてご紹介していきます。まずはその目的や方法、必要な環境などについてみていきましょう。 - 第25回 32ビット環境に迫る「2038年問題」 時計がおかしくなると……
いまだ数多くのシステムで32ビットのOSやアプリケーションが使われていますが、実は深刻な影響が懸念される「2038年問題」を抱えています。将来どのような影響が出るのかについて、今回から「Docker」による検証を先取りしていきます。 - 【古賀政純の「攻めのITのためのDocker塾」】バックナンバー
Copyright © ITmedia, Inc. All Rights Reserved.