Dockerコンテナのネットワーク設定

カテゴリ:コンテナ仮想化

この記事ではDockerのネットワーク設定について解説いたします。

Note以降は CentOS 8 + Docker 19.03.12 環境での手順となります。

Dockerコンテナの作成時はデフォルト(ネットワークを指定しない場合)ではコンテナにホストと別ネットワークのIPアドレスを割り当てます。 ホストと同じIPアドレスを使用したり、ループバックアドレスのみを有効にする場合はオプションでネットワーク名を指定する必要があります。

Dockerコンテナで指定可能なネットワークの確認

まず、Dockerコンテナで指定できるネットワーク名を docker network ls コマンドで確認します。

例)

# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
a78ed51400c8        br0                 bridge              local
a7b5078fdefd        bridge              bridge              local
655c6de238a1        host                host                local
1932ce4fd492        none                null                local
ネットワークの種類
bridgeホストと別のネットワークのIPアドレスを割り振る
hostホストと同じIPアドレスを共有
noneループバックインターフェースのみを使用

参考bridgeは、ホストとコンテナ間での仮想ネットワークインターフェースvethを使用した通信を行います。ホストの仮想ブリッジdocker0がゲートウェイとなり、コンテナにIPアドレス(初期設定:172.17.0.0/16)を割り振ります。

# ifconfig
...
docker0: flags=4099  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:9eff:fe20:71b4  prefixlen 64  scopeid 0x20
        ether 02:42:9e:20:71:b4  txqueuelen 0  (Ethernet)
        RX packets 13  bytes 1444 (1.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 50  bytes 6096 (5.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Dockerコンテナを起動すると、ホスト側に仮想ネットワークインターフェースvethが作成されることが確認できます。

# ifconfig
...
veth27e8b50: flags=4163  mtu 1500
        inet6 fe80::20bb:22ff:fe80:c9a6  prefixlen 64  scopeid 0x20
        ether 22:bb:22:80:c9:a6  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17  bytes 2236 (2.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Dockerコンテナにネットワークを指定

使用するネットワークは、Dockerコンテナの作成時に --network オプションで指定します。

例)

docker run -it --name httpd1 --network host httpd

参考bridge、host、noneのいずれかを指定します。--network オプションを指定しない場合は、bridgeとなります。

DockerコンテナのIPアドレスを確認

bridgeを指定したコンテナのIPアドレスを確認する場合は docker inspect コマンドに続けて対象のコンテナIDまたは名前を指定します。

docker inspect コンテナID|名前

例)

ゲートウェイ 172.17.0.1 から、IPアドレス 172.17.0.3 が割り振られていることが確認できますね。

docker inspect httpd1
...
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "a7b5078fdefd33867d73fefb259022ccf77bc702452b135bc72010f2960c2136",
                    "EndpointID": "07394a8eaf83d8814d38bf5df77d7d7b2336f6755855a8eb7d274bc265ccedab",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }
...

ネットワークモードごとのコンテナの状態

最後に、参考のために各ネットワークモードごとのコンテナ側のネットワークインターフェースの状態を載せておきます。

host

ホスト側と同じになります。

# ip addr
...
2: ens33:  mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:85:1a:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.38/24 brd 192.168.11.255 scope global dynamic noprefixroute ens33
       valid_lft 172613sec preferred_lft 172613sec
    inet6 2408:210:c5c4:7e00:8b8b:2b8:b119:98c8/64 scope global dynamic noprefixroute
       valid_lft 2591816sec preferred_lft 604616sec
    inet6 fe80::6b78:60ac:456e:f86e/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
...

bridge

ホストとは別ネットワーク(172.17.0.0/16)のIPアドレスが割り振られます。

# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
7: eth0@if8:  mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

none

ループバックインターフェースのみとなります。

# ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

公開日時: 2020年08月25日  19:06:40

本格的なスキルを身につける

Linux/ITエンジニアとしてのスキルを身につけるにはLPI-Japanアカデミック認定校リナックスアカデミーがおすすめですよ。

コンテナ仮想化に戻る

「コンテナ仮想化」に関する他の手順
「コンテナ仮想化」に関するTips

「コンテナ仮想化」に関するTipsはありません。

このページのトップに戻る