Docker (três) Contêiner do Docker e modo de rede

1. Seis isolamentos de namespaces

Ventilador Xiang tipo Descrição da função
Nº 1 Namespace MNT Fornece isolamento de pontos de montagem de disco e sistemas de arquivos
Nº 2 Namespace IPC Fornece capacidade de isolamento para comunicação entre processos
N ° 3 Espaço de nomes de rede Fornece recursos de isolamento de rede
Nº 4 Namespace UTS Fornece capacidade de isolamento de nome de host
NÚMERO 5 Namespace PID Fornecer capacidade de isolamento de processo
NÚMERO 6 Namespace de usuário Fornecer capacidade de isolamento do usuário

2. Rede Docker

O Docker usa a ponte do Linux para virtualizar uma ponte de contêiner do Docker (docker0) na máquina host. Quando o Docker inicia um contêiner, ele atribui um endereço IP ao contêiner de acordo com o segmento de rede da ponte do Docker, chamado Container-IP. Ao mesmo tempo, a ponte do Docker é cada gateway padrão para cada contêiner. Como os contêineres no mesmo host estão conectados à mesma ponte, os contêineres podem se comunicar diretamente por meio do Container-IP do contêiner.

A ponte do Docker é virtualizada pelo host, não por um dispositivo de rede real. A rede externa não pode ser endereçada, o que significa que a rede externa não pode
acessar diretamente o contêiner por meio do Container-IP. Se o contêiner quiser que o acesso externo seja acessível, você pode mapear a porta do contêiner para o host do host (mapeamento da porta), ou seja, habilitá-lo por meio do parâmetro -p ou -Р quando o docker run cria um contêiner e usar [host IP ] ao acessar o container: [Porta do container] Acesse o container.
insira a descrição da imagem aqui

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-4Y2xC0Tb-1646748475005) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\2.bmp)]

Como tornar o contêiner acessível do lado de fora? A seguir, falaremos sobre uma função, mapeamento de porta de contêiner

1. Mapeamento de portas

(1) Mapeamento de porta aleatório

docker run -itd -P 镜像:标签 

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendável salvar a imagem e carregá-la diretamente (img-aIUnjVDz-1646748475006) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\3.bmp)]

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-vcnw19lX-1646748475006) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\4.bmp)]

(2) Especifique o mapeamento de portas

docker run -itd -p 指定宿主机端口:指定容器端口 镜像:标签

##宿主机端口 32768 - 60999 这些端口都能被使用  0-32767 端口是被系统所使用的

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-B3de9GEf-1646748475007) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\5.bmp)]

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-AM7iLnQ3-1646748475007) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\6.bmp)]

2. Visualize os registros do contêiner

docker logs 容器id或容器名

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendável salvar a imagem e carregá-la diretamente (img-y9cb8yw8-1646748475008) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\7.bmp)]

3. modo de rede docker

**Host:** o contêiner não virtualizará sua própria placa de rede, configurará seu próprio IP etc., mas usará o IP e a porta do host.

**Contêiner:** o contêiner criado não criará sua própria placa de rede e configurará seu próprio IP, mas compartilhará o IP e o intervalo de portas com um contêiner especificado.

**Nenhum:** este modo desativa os recursos de rede do contêiner.

**Bridge:** o padrão é este modo. Este modo atribuirá e definirá o IP para cada contêiner e conectará o contêiner a uma ponte virtual docker0 para se comunicar com o host por meio da configuração da ponte dockerl e da tabela iptablesnat.

rede personalizada

Quando o Docker é instalado, ele cria automaticamente três redes, bridge (os contêineres criados são conectados a esta rede por padrão), nenhum, host

Modo de rede detalhado

1. modo de host:

Equivalente ao modo bridge no VMware, está na mesma rede que o host, mas não possui um endereço IP independente.

O Docker usa a tecnologia de namespaces do Linux para isolar recursos, como PID Namespace para isolar processos, Mount Namespace para isolar sistemas de arquivos e NetworkNamespace para isolar redes.

Um namespace de rede fornece um ambiente de rede independente, incluindo placas de rede, roteamento, regras de iptable, etc., que são isolados de outros namespaces de rede.

Um contêiner do Docker geralmente recebe um namespace de rede separado.

No entanto, se o modo de host for usado ao iniciar o contêiner, o contêiner não obterá um namespace de rede independente, mas compartilhará um namespace de rede com o host. O contêiner não virtualizará sua própria placa de rede, configurará seu próprio IP etc., mas usará o IP e a porta do host.

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-tfo4ZXji-1646748475008) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\10.bmp)]

2.modo de contêiner

Depois de entender o modo de host, esse modo é fácil de entender. Esse modo especifica que os contêineres recém-criados compartilham um
Namespace de rede com um contêiner existente, em vez de com o host. O contêiner recém-criado não criará sua própria placa de rede, configurará seu próprio IP, mas compartilhará o IP, intervalo de portas etc. com um contêiner especificado. Da mesma forma, além da rede, os dois contêineres são isolados de outros aspectos, como sistemas de arquivos, listas de processos, etc. Os processos dos dois contêineres podem se comunicar por meio do dispositivo de placa de rede Io.

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendável salvar a imagem e carregá-la diretamente (img-CvN8av1M-1646748475009) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\11.bmp)]

(1). Veja a lista de redes do docker

[root@localhost ~]# docker network ls

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendável salvar a imagem e carregá-la diretamente (img-OzcInBV1-1646748475009) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\8.bmp)]

(2) Obtenha o número do processo do contêiner

docker inspect -f '{
   
   {.State.Pid}}' 容器Pid号

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-EQNWqA6D-1646748475010) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\9.bmp)]

(3) O contêiner especifica o modo de contêiner

docker run -itd --name c2 --net=container:817518d0df4b nginx:1.14 bash

3.modo nenhum

Com nenhum modo, o contêiner do Docker tem seu próprio namespace de rede, no entanto, nenhuma configuração de rede é feita para o contêiner do Docker.
Em outras palavras, esse contêiner do Docker não possui placa de rede, IP, roteamento e outras informações. Nesse modo de rede, o contêiner possui apenas a rede de loopback lo e nenhuma outra placa de rede. Esse tipo de rede não pode ser conectado em rede e uma rede fechada pode garantir a segurança do contêiner.

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-uAKfKy3U-1646748475011) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\12.bmp)]

4. modo noiva

O modo de ponte é o modo de rede padrão do docker. Sem o parâmetro --net, é o modo de ponte.

Equivalente ao modo nat no VMware, o contêiner usa um namespace de rede independente e se conecta à placa de rede virtual docker0. Comunique-se com o host por meio da configuração da ponte docker0 e da tabela iptablesnat, este modo atribuirá o Network Namespace, definirá o IP etc. para cada contêiner e conectará o contêiner do Docker em um host a uma ponte virtual.

(1) Quando o processo do Docker for iniciado, uma ponte virtual chamada docker0 será criada no host e o contêiner do Docker iniciado nesse host será conectado a essa ponte virtual. Uma ponte virtual funciona como um switch físico, para que todos os contêineres no host sejam conectados a uma rede de camada 2 por meio do switch.

(2) Atribua um IP ao contêiner da sub-rede docker0 e defina o endereço IP do docker0 como o gateway padrão do contêiner. Crie um par de dispositivos de veth pair de NIC virtual no host. Os dispositivos Veth sempre vêm em pares, eles formam um canal de dados e os dados entram de um dispositivo e saem do outro dispositivo. Portanto, os dispositivos veth são frequentemente usados ​​para conectar dois dispositivos de rede.

(3) O Docker coloca uma extremidade do dispositivo veth pair no contêiner recém-criado e o nomeia eth0 (a placa de rede do contêiner), e a outra extremidade é colocada no host, nomeada com um nome semelhante como veth*, e adiciona este dispositivo de rede na ponte docker0. Ele pode ser visualizado com o comando brctl show.

(4) Ao usar o docker run -p, o docker realmente cria regras de DNAT em iptables para realizar a função de encaminhamento de porta. Você pode usar iptables -t nat -vnL para visualizar.

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-SncbZdAz-1646748475011) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\13.bmp)]

5. Rede personalizada

Você pode personalizar a rede primeiro e, em seguida, usar o IP especificado para executar o docker

docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwor

##fdocker1为执行ifconfig -a 命令时,显示的网卡名,如果不使用--opt 参数指定此名称,那你在使用ifconfig -a命令查看网络信息时,看到的是类似br-110eb56a0b22这样的名字,这显然不怎么好记。
#mynetwork为执行docker network list命令时,显示的bridge网络模式名称。

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendável salvar a imagem e carregá-la diretamente (img-CABCyaLm-1646748475012) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\14.bmp)]

Execute o docker com o IP especificado

docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash

Controle de recursos de contêiner

1. Controle de recursos da CPU

O cgroups é uma ferramenta de kernel Linux muito poderosa que pode não apenas limitar recursos isolados por namespace,
mas também definir pesos para recursos, calcular o uso, controlar o início e a parada do processo e assim por diante. Portanto, cgroups (grupos de controle) implementam cotas e métricas para recursos.

O Cgroups tem quatro funções:
**Limite de recursos: **Você pode limitar a quantidade total de recursos usados ​​pelas tarefas
**Alocação prioritária: Através do número de fatias de tempo de CPU alocadas e do tamanho da largura de banda do disco Io, é na verdade equivalente ao controle a tarefa em execução Estatísticas de recursos de nível de prioridade: **Você pode contar o uso de recursos do sistema, como tempo de CPU, uso de memória, etc.
Controle de tarefas: o cgroup pode executar operações como suspender e retomar tarefas

(1) Defina o limite superior de uso da CPU

O Linux usa CFS (Completely Fair Scheduler, completamente justo scheduler) para agendar o uso da CPU por cada processo. O período de agendamento padrão do CFS é de 10ms.

Podemos definir o período de agendamento de cada processo de contêiner e quanto tempo de CPU cada contêiner pode usar no máximo durante esse período.

Use --cpu-period para definir o período de agendamento e use --cpu-guota para definir o tempo de CPU que o contêiner pode usar em cada período. Ambos podem ser usados ​​juntos. O intervalo válido do período CFS é 1ms~1s, e o intervalo de valor correspondente de –cpu-period é 1000~1000000.
A cota de CPU do container não deve ser menor que 1ms, ou seja, o valor de --cpu-quota deve ser >= 1000.

Modifique o limite de uso da CPU via arquivo

Exemplo: preparar uma máquina virtual com apenas um núcleo

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-cdwBeWqu-1646748475012) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\15.bmp)]

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-3dRvC0uX-1646748475013) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\16.bmp)]

Então, por que ocupa tantos recursos da CPU de uma só vez, podemos visualizar um arquivo de configuração

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-0ldiVvmr-1646748475013) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\17.bmp)]

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-FpQLbxKU-1646748475014) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\18.bmp)]

Especifique o uso da CPU ao executar o contêiner

docker run -itd --name 容器名 --cpu-quota 使用率 镜像:标签 bash

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-HSPR7ChW-1646748475014) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\19.bmp)]

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-SjIDSXOY-1646748475015) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\20.bmp)]

(2) Defina a taxa de ocupação de recursos da CPU (é válido definir vários contêineres)

O Docker especifica compartilhamentos de CPU por meio de **--cpu-shares**, o valor padrão é 1024 e o valor é um múltiplo de 1024

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendável salvar a imagem e carregá-la diretamente (img-ATNSIe4l-1646748475015) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\21.bmp)]

Abra mais três terminais para efetuar login nos três contêineres de c3, c4 e c5, instale os pacotes dependentes e gere quatro processos de cpu.

yum install -y epel-release
yum install -y stress
stress -c 4

Abra outro terminal e verifique a taxa de CPU do contêiner

docker stats

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendável salvar a imagem e carregá-la diretamente (img-RiI1Q3yl-1646748475016) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\22.bmp)]

(3) Defina o contêiner para vincular a CPU especificada

Primeiro, aloque 4 núcleos de CPU para a máquina virtual

Crie um contêiner c6 e vincule as CPUs nº 1 e nº 3

[root@localhost ~]# docker run -itd --name c6 --cpuset-cpus 1,3 centos:7 bash

Instalação, pacotes de dependência, software de teste de estresse

yum install -y epel-release
yum install -y stress

Inicie o teste de estresse e gere 4 processos de CPU

stress -c 4

Abra outro terminal para executar top e pressione 1 para visualizar

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-Akf3L9jl-1646748475016) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\23.bmp)]

2. Restrições ao uso de memória

docker run -itd --name 容器名 -m 所限制的内存大小 镜像:标签 bash
docker stats ##查看容器使用情况

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-TFec7fWy-1646748475017) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\25.bmp)]

(1) Restrições na troca de partição swap

Enfatize que --memory-swap deve ser usado com --memory.
Normalmente, o valor de --memory-swap contém a memória disponível do contêiner e a troca disponível.
Então -m 300m --memory-swap=1g significa: o contêiner pode usar 300M de memória física e pode usar 700M (1G - 300) de swap.
Se --memory-swap for definido como 0 ou não definido, o tamanho de troca que o contêiner pode usar será o dobro do valor -m.
Se o valor de --memory-swap for igual a -m, o contêiner não poderá usar swap.
Se o valor --memory-swap for -1, significa que a memória usada pelo programa de contêiner é limitada e o uso do espaço de troca que pode ser usado não é limitado (quantos contêineres de troca o host puder usar)

3. Restrições no controle de cota de E/S de disco (blkio)

--device-read-bps: limita a velocidade de leitura bps (quantidade de dados) em um dispositivo, a unidade pode ser kb, mb (M) ou gb.

例: docker run -itd --name test9 --device-read-bps /dev/sda:1M centos:7 /bin/bash

--device-write-bps : Limita a velocidade de gravação bps (quantidade de dados) em um dispositivo, a unidade pode ser kb, mb (M) ou gb

例: docker run -itd --name test10 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

–device-read-iops : limita o iops (número de vezes) de leitura de um dispositivo
–device-write-iops : limita o iops (número de vezes) de gravação em um dispositivo

Exemplo:

Requisito: Crie e abra um contêiner c8, a imagem é centos:7 e o limite de velocidade de leitura no dispositivo /dev/sda é definido como 1mb/s

docker run -itd --name c8 --device-write-bps /dev/sda:1mb centos:7 bash
docker exec -it c8 bash

teste de gravação

dd if=/dev/zero of=test.txt bs=1M count=10 oflag=direct

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendado salvar a imagem e carregá-la diretamente (img-NNHcZBVe-1646748475017) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\26.bmp)]

Limpe o espaço em disco ocupado pelo docker

Pode ser usado para limpar discos, remover contêineres fechados, volumes de dados inúteis e redes

docker system prune -a

[Falha na transferência da imagem do link externo, o site de origem pode ter mecanismo anti-leech, é recomendável salvar a imagem e carregá-la diretamente (img-aMIpf4g0-1646748475018) (C:\Users\zhuquanhao\Desktop\Screenshot command collection\linux \Docker\Docker section Parte II\27.bmp)]

Acho que você gosta

Origin blog.csdn.net/weixin_54059979/article/details/123364632
Recomendado
Clasificación