Artigo Diretório
- Prefácio
- Um: explicação detalhada dos recursos de rede Dcker
- 2. Explicação da placa de rede Docker0
- Dois: como usar o modo de rede
- Três. Estojo pequeno
-
- 1. Crie um mybework de ponte personalizado e especifique o segmento de rede
- 2. Crie um contêiner, especifique a ponte para a placa de rede mynetwork e especifique seu IP como 172.18.0.10
- 3. Insira o contêiner para ver a confirmação de IP
- 4. Visualize a lista de placas de rede host
- 5. Através da correspondência do número de ID, você pode confirmar a faixa do segmento de rede IP
Prefácio
Um: explicação detalhada dos recursos de rede Dcker
Mapa de ambiente ecológico de plataforma de nuvem simples
Gráfico de ponte de nó único comum
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
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
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
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
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
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