Ubuntu 21.04
Sponsored Link

Docker : Docker Network
2021/05/13
 
Docker コンテナーのネットワーク管理の基本操作です。
[1] コンテナー起動時にネットワークを指定しない場合は、デフォルトの [bridge] が使用されます。
# ネットワーク一覧表示

root@dlp:~#
docker network ls

NETWORK ID     NAME           DRIVER    SCOPE
eb0bb379e2ec   bridge         bridge    local
6950c914e786   host           host      local
b47801ff9a1b   none           null      local
c4eb2de2e30c   root_default   bridge    local

# [bridge] の詳細表示

root@dlp:~#
docker network inspect bridge

[
    {
        "Name": "bridge",
        "Id": "eb0bb379e2ecc8697a8083979dddc8bdfe857b776151a0a2e3d456c2e838327d",
        "Created": "2021-05-12T06:30:08.739609048Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

# コンテナーのネットワークはデフォルトでは [bridge] が使用される

root@dlp:~#
docker run ubuntu /bin/bash -c "apt-get update; apt-get -y install iproute2; /usr/sbin/ip route"

.....
.....
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2
[2] デフォルトの [172.17.0.0/16] 以外のサブネットでコンテナーを起動したい場合は、以下のように実行します。
# [network01] ネットワークを [192.168.100.0/24] のサブネットで作成

root@dlp:~#
docker network create --subnet 192.168.100.0/24 network01

82bcd9fe7673350b410959d8316d603eb5ddcff67a0de0079b3a0250923ba8ad

root@dlp:~#
docker network ls

NETWORK ID     NAME           DRIVER    SCOPE
eb0bb379e2ec   bridge         bridge    local
6950c914e786   host           host      local
82bcd9fe7673   network01      bridge    local
b47801ff9a1b   none           null      local
c4eb2de2e30c   root_default   bridge    local

# [network01] ネットワークを指定してコンテナーを起動

root@dlp:~#
docker run --net network01 ubuntu /bin/bash -c "apt-get update; apt-get -y install iproute2; /usr/sbin/ip route"

.....
.....
default via 192.168.100.1 dev eth0
192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.2

# 起動済みのコンテナーに作成したネットワークを接続する場合は以下

root@dlp:~#
docker ps

CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS         PORTS                  NAMES
de3543f828c0   srv.world/ubuntu-nginx   "/usr/sbin/nginx -g …"   10 seconds ago   Up 8 seconds   0.0.0.0:8081->80/tcp   exciting_proskuriakova

root@dlp:~#
docker exec de3543f828c0 /usr/sbin/ip route

default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2

# サブネット内の任意の IP アドレスを指定してコンテナーに割り当て

root@dlp:~#
docker network connect --ip 192.168.100.10 network01 de3543f828c0
root@dlp:~#
docker exec de3543f828c0 /usr/sbin/ip route

default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2
192.168.100.0/24 dev eth1 proto kernel scope link src 192.168.100.10

# 接続したネットワークを切断する場合は以下

root@dlp:~#
docker network disconnect network01 de3543f828c0

root@dlp:~#
docker exec de3543f828c0 /usr/sbin/ip route

default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2
[3] 作成した Docker ネットワークを削除する場合は以下のように実行します。
root@dlp:~#
docker network ls

NETWORK ID     NAME           DRIVER    SCOPE
eb0bb379e2ec   bridge         bridge    local
6950c914e786   host           host      local
82bcd9fe7673   network01      bridge    local
b47801ff9a1b   none           null      local
c4eb2de2e30c   root_default   bridge    local

# [network01] を削除

root@dlp:~#
docker network rm network01

network01
# コンテナーで使用されていないネットワークを一括削除

root@dlp:~#
docker network prune

WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
root_default
[4] デフォルトのブリッジではなくホストネットワークに接続する場合は以下のように実行します。
root@dlp:~#
docker network ls

NETWORK ID     NAME      DRIVER    SCOPE
eb0bb379e2ec   bridge    bridge    local
6950c914e786   host      host      local
b47801ff9a1b   none      null      local

root@dlp:~#
docker images

REPOSITORY                 TAG           IMAGE ID       CREATED       SIZE
srv.world/ubuntu-apache2   latest        84bcc150feb9   5 hours ago   216MB
srv.world/ubuntu-nginx     latest        8f1fbe417eb2   5 hours ago   160MB
mariadb                    latest        992bce5ed710   2 weeks ago   401MB
ubuntu                     latest        7e0aa2d69a15   2 weeks ago   72.7MB
nginx                      latest        62d49f9bab67   4 weeks ago   133MB
dlp.srv.world:5000/nginx   my-registry   62d49f9bab67   4 weeks ago   133MB

# [host] ネットワークを指定してコンテナー起動

root@dlp:~#
docker run -d --net host srv.world/ubuntu-apache2

6b8e52abfbb4b5a36146d1cf15f345a8e1e7ddf31966a0a420647c7a3828290f

root@dlp:~#
docker ps

CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS         PORTS     NAMES
6b8e52abfbb4   srv.world/ubuntu-apache2   "/usr/sbin/apachectl…"   6 seconds ago   Up 5 seconds             vigilant_curie

# コンテナーで起動する [apache2] サービスがリスンする [80] ポートはホスト側で使用される

root@dlp:~#
ss -napt

State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port
.....
.....
LISTEN    0         511                      *:80                     *:*        users:(("apache2",pid=20871,fd=4),("apache2",pid=20870,fd=4),("apache2",pid=20869,fd=4))

root@dlp:~#
curl localhost

index.html on Aapche2
関連コンテンツ