Recursos detalhados de rede do Docker --- (quatro modos de rede)

Prefácio

Um: explicação detalhada dos recursos de rede Dcker

Mapa de ambiente ecológico de plataforma de nuvem simples

Insira a descrição da imagem aqui

Gráfico de ponte de nó único comum

Insira a descrição da imagem aqui

1.1: Recursos de rede detalhados: placa de rede Docker0 e quatro modos de rede

Quando instalarmos o Docker, descobriremos que o sistema criou automaticamente uma placa de rede docker0 e outros modos de rede Docker

[root@docker ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> 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
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:68:b8:a6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.233.133/24 brd 192.168.233.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::35a9:b12:5e2b:c44d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:47:ba:2a:13 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
[root@docker ~]# docker network ls	'//自动创建了三个网络'
NETWORK ID          NAME                DRIVER              SCOPE
17c7a951c27d        bridge              bridge              local
7bc6ae3204ea        host                host                local
953022b62b1c        none                null                local

2. Explicação da placa de rede Docker0

Após a instalação do Docker ser concluída, a placa de rede Docker0 é usada como o gateway do contêiner. Quando o contêiner é iniciado, um endereço IP será atribuído ao contêiner a partir deste segmento de rede, chamado container-ip, e os contêineres se comunicam através do Docker0.

Como a placa de rede Docker0 é virtualizada, a rede externa não pode se comunicar diretamente e só pode acessar o contêiner por meio do mapeamento da porta

Insira a descrição da imagem aqui

1. Modo host

O contêiner e o host compartilham o namespace da rede

O contêiner usará o endereço IP e a porta do host, mas outros aspectos do contêiner, como o sistema de arquivos, ainda estão isolados do host

A vantagem é que o desempenho da rede é bom, sem conversão nat

A desvantagem é que o isolamento da rede não é bom, e as portas usadas não podem mais ser usadas

Insira a descrição da imagem aqui

2. Modo de contêiner

O modo de contêiner é para compartilhar um namespace de rede com um contêiner existente. O contêiner recém-criado não criará sua própria placa de rede e seu próprio IP, portanto, os dois contêineres podem se comunicar por meio do dispositivo de placa de rede lo

Mas, como o modo host, o sistema de arquivos, lista de processos, etc. ainda estão isolados

Insira a descrição da imagem aqui

3. modo nenhum

O modo nenhum desativa a função de rede do contêiner,

O contêiner terá seu próprio namespace de rede, mas o contêiner não terá outra configuração de rede, como placa de rede, ip, roteamento e outras informações, precisamos adicioná-lo manualmente

As vantagens são bom fechamento de rede e alta segurança de contêiner

Insira a descrição da imagem aqui

4. Modo ponte

O modo bridge atribui e define um endereço IP para cada contêiner e conecta o contêiner a uma ponte virtual Docker0 por meio do par veth e se comunica com o host por meio da ponte docker0 e da configuração da tabela nat iptables

O modo Bridge é o modo padrão do Docker. Geralmente, o Docker usará o segmento de rede 172.17.0.0/16

Insira a descrição da imagem aqui

Dois: como usar o modo de rede

Especifique o modo e especifique o ip

O modo de ponte é o padrão e não precisa ser especificado. Se você quiser especificar o modo, você precisa adicionar –net = “none”, –net = “host”, -

net="container:name or id" 例如:
[root@docker ~]# docker run -it centos:7 /bin/bash	'//这个默认就是桥接模式'

O modo bridge não pode especificar diretamente o ip. Se você deseja especificar o ip, você precisa criar a rede sozinho. A rede criada está no mesmo nível da rede Docker0.

[root@docker ~]# docker network create --subnet=172.18.0.0/24 mynetwork
[root@docker ~]# docker run -itd --name test004 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
[root@docker ~]# docker ps -a

Três. Estojo pequeno

1. Crie um mybework de ponte personalizado e especifique o segmento de rede

[root@docker2 ~]# docker network create --subnet=172.18.0.0/24 mynetwork
19d86a0d935fee82cc692babe5760b7303fe1be93f1f8e4ba93c80d1d2b17c17
[root@docker2 ~]# ifconfig
br-19d86a0d935f: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.255.0  broadcast 172.18.0.255
        ether 02:42:58:33:a7:e1  txqueuelen 0  (Ethernet)
        RX packets 41  bytes 3153 (3.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 49  bytes 3211 (3.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:76ff:fe5d:22a1  prefixlen 64  scopeid 0x20<link>
        ether 02:42:76:5d:22:a1  txqueuelen 0  (Ethernet)
        RX packets 20315  bytes 827845 (808.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22061  bytes 134128614 (127.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.11  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::20c:29ff:fe0e:5518  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:0e:55:18  txqueuelen 1000  (Ethernet)
        RX packets 123326  bytes 149402434 (142.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 49778  bytes 6449791 (6.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 16  bytes 800 (800.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 800 (800.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth8383311: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::6cdb:eeff:fec2:ce8b  prefixlen 64  scopeid 0x20<link>
        ether 6e:db:ee:c2:ce:8b  txqueuelen 0  (Ethernet)
        RX packets 41  bytes 3153 (3.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 49  bytes 3211 (3.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:48:6e:c2  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2. Crie um contêiner, especifique a ponte para a placa de rede mynetwork e especifique seu IP como 172.18.0.10

[root@docker2 ~]# docker run -itd --name test2 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash
3e45de1e549ad41ab97e24cdb01df50531d550f771c094a560db262506b7e758
[root@docker2 ~]# docker ps -a
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS        PORTS                     NAMES
3e45de1e549a        centos:7             "/bin/bash"              13 seconds ago      Up 11 seconds                                  test2
83a4476a2a6e        centos:7             "/bin/bash"              37 seconds ago      Created

3. Insira o contêiner para ver a confirmação de IP

[root@docker2 ~]# docker exec -it 3e45de1e549a bash
[root@3e45de1e549a /]# ifconfig
Yum install net-tools  -y
[root@3e45de1e549a /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.10  netmask 255.255.255.0  broadcast 172.18.0.255
        ether 02:42:ac:12:00:0a  txqueuelen 0  (Ethernet)
        RX packets 2234  bytes 11881774 (11.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2211  bytes 122963 (120.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 82  bytes 7643 (7.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 82  bytes 7643 (7.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@3e45de1e549a /]#

4. Visualize a lista de placas de rede host

[root@docker2 mysql]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
0d8a08e72533        bridge              bridge              local
41aec0a12cdb        host                host                local
19d86a0d935f        mynetwork           bridge              local
68aa8c25f2bc        none                null                local

5. Através da correspondência do número de ID, você pode confirmar a faixa do segmento de rede IP

[root@docker2 mysql]# ifconfig
br-19d86a0d935f: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.255.0  broadcast 172.18.0.255
        inet6 fe80::42:58ff:fe33:a7e1  prefixlen 64  scopeid 0x20<link>
        ether 02:42:58:33:a7:e1  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21  bytes 2440 (2.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Acho que você gosta

Origin blog.csdn.net/BIGmustang/article/details/108747450
Recomendado
Clasificación