2020年12月14日
Dockerコンテナ間のパケットの流れ Part-1
Docker コンテナ間のパケットの流れが知りたかったので実験をしてみました.
Part-1(この記事)でパケットキャプチャを,後半の Part-2 では実験後調べてわかったことをまとめています.
実験
Docker コンテナを2つ作り,その間を通るパケットをキャプチャします.
環境
- GNU/Linux Ubuntu20:04
- Docker version 20.10.0 build 7287ab3
1. Docker コンテナを2つ作成する
- nginx のコンテナ
- ubuntu20.04 のコンテナ
イメージの取得
docker pull ubuntu:focal
docker pull nginx:stableイメージが取得できたか確認します.
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu focal f643c72bc252 12 days ago 72.9MB
nginx stable 2562b6bef976 13 days ago 133MBコンテナ作成
docker run -dit --name ubuntu ubuntu:focal
docker run -d --name nginx -p 8080:80 nginx:stableコンテナが作成できたか確認します.
docker container ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d548a1da6a21 ubuntu:focal "/bin/bash" 10 minutes ago Up 10 minutes ubuntu
04fc8579cf2d nginx:stable "/docker-entrypoint.…" 13 minutes ago Up 12 minutes 0.0.0.0:8080->80/tcp nginx2. コンテナ間で疎通
ping を飛ばせるようにする
Ubuntu のコンテナに必要なパッケージのインストールを行います.
ping コマンドを使いたいので iputils-ping パッケージをインストールします.
docker exec -t ubuntu apt update
docker exec -t ubuntu apt install -y iputils-pingping が飛ばせるか確認します.
docker exec -it ubuntu ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=113 time=4.19 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=113 time=4.54 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=113 time=4.05 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=113 time=4.05 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=113 time=3.92 ms
^C
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 3.923/4.150/4.538/0.210 msコンテナの ip アドレスを確認する
IP アドレスは hostname コマンドでわかります.
docker exec nginx hostname -i172.17.0.22つのコンテナの IP アドレスは表の通り.
| コンテナ | IP アドレス |
|---|---|
| ubuntu | 172.17.0.2 |
| nginx | 172.17.0.3 |
疎通確認
Ubuntu コンテナ側から ping を飛ばしてみます.
docker exec -it ubuntu ping 172.17.0.3PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.015 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.044 ms
64 bytes from 172.17.0.3: icmp_seq=4 ttl=64 time=0.049 ms
64 bytes from 172.17.0.3: icmp_seq=5 ttl=64 time=0.054 ms
^C
--- 172.17.0.3 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4100ms
rtt min/avg/max/mdev = 0.015/0.042/0.054/0.013 ms3. パケットキャプチャ
Wireshark を開き,インターフェースに docker0 を選択してパケットキャプチャを行います.
4. わかったこと
Wireshark のスクリーンショットの右下にパケットの構造が表示されています.Ethernet の中に IPv4 があり,そのデータ部分に ICMP があります.
ここからわかるのは流れているのは普通のパケットと同じ構造のものということです.
Part-2 に続きます.
次:Part-2(今月中に投稿する予定)