Java Avançado - Compreensão Simples dos Princípios de Isolamento de Contêiner do Docker

prefácio

Antes de começar a ler este artigo, se você não conhece os cenários de uso e os conceitos do Docker, leia primeiro meu blog: Entendendo os conceitos do Docker de maneira fácil de entender

Depois de entender o conceito e os princípios básicos do Docker, vamos estudar em profundidade como a função de isolamento de contêiner do Docker é alcançada?

Agora suponha que em um de nossos projetos Java, ele dependa de vários frameworks como Node, Mysql, Redis, RocketMQ, etc. ao mesmo tempo. Então, depois que cada serviço for empacotado em um contêiner, haverá algum impacto entre eles? Que tipo de impacto terá?

Mecanismo de isolamento de contêiner do Docker

1. Os recipientes não interferem entre si .

Pelo exposto, podemos entender que uma série de serviços como Redis, Mysql, Node e programas Java são empacotados em diferentes contêineres por meio do Docker, então por que precisamos fazer isolamento de contêiner? A razão é a seguinte

1.  Cada serviço pode ver o processo de outros serviços, e também pode acessar quaisquer arquivos locais à vontade.Com base nessa situação, se um dos serviços do servidor for invadido, outros serviços também serão invadidos.

2. Diferentes contêineres são vários processos especiais diferentes no servidor e haverá um relacionamento entre os processos: relacionamento de competição. Eles continuarão consumindo recursos do servidor.Se um dos contêineres ocupar recursos do sistema, outros serviços terão uma reação em cadeia e cairão.

Para evitar a situação acima, deve haver um chamado " limite " entre os contêineres, então como o Docker mantém os limites entre os contêineres?

Existem basicamente duas maneiras de usar o Linux

        2.1 Grupos C

        Fornecido pelo kernel do Linux é principalmente uma tecnologia para alocar recursos para processos.

        2.2 NameSpace

        NameSpace é traduzido literalmente como um namespace em chinês, que é como simular o ambiente de execução do contêiner atual, de modo que o ID do processo do contêiner atual permaneça inalterado. E o contêiner só pode acessar um sistema de arquivos virtual que o Docker monta nele . Isso atinge o isolamento entre os contêineres.

Resumindo: NameSpace limita a visão do container , e Cgroup limita os recursos do container .

2. O que é um sistema de arquivos virtual ?

Na verdade, é um sistema de arquivos independente que atende contêineres, também conhecido como " imagem de contêiner " ou um termo mais profissional: " rootfs ".

Ele contém os arquivos , configurações e diretórios necessários para um sistema operacional . Mas observe: ele não contém o kernel do sistema.

Porque no Linux, os arquivos e o kernel são armazenados separadamente. O sistema operacional só carrega o kernel quando é inicializado. Isso significa que todos os contêineres compartilharão o kernel do sistema operacional no servidor .

Ao mesmo tempo, o rootfs também resolve um problema: " reutilização ".

Suponha que agora tenhamos empacotado uma imagem de contêiner Centos contendo um projeto JavaWeb, mas precisamos introduzir um proxy reverso Nginx para acesso posterior, então precisamos reintegrar e empacotar o contêiner? Neste momento, um novo conceito será introduzido: camada.

3. O que é uma camada?

camada (camada). É conceitual. Toda vez que fazemos alterações no rootfs, mantemos apenas o conteúdo " incremental " em vez de reempacotar um espelho. Também vem da operação do Linux: sistema de arquivos de união (sistema de arquivos de união)

4. Extensão de comando do Docker

1.docker cria <image_id>

Explicação: Adicione uma camada legível e gravável à imagem especificada e construa um novo contêiner.

Observação: o contêiner não é iniciado neste momento

2.docker start <container_id>

Explicação: Crie um novo espaço de isolamento de processo para o sistema de arquivos contêiner.

Observação: Cada contêiner pode ter apenas um espaço de isolamento de processo. Ele não pode ser criado várias vezes

3. docker run <image_id>

Explicação: Um entendimento simples é a inicialização do contêiner.

Extensão : qual é a diferença entre ela e o docker start? Na verdade, docker run é uma combinação de docker create e docker start. Ele primeiro usará create para criar um contêiner usando a imagem e, em seguida, executá-lo. Assim como git pull é um comando combinado de busca e mesclagem.

4.docker ps

Explicação: Liste todos os contêineres em execução. Se você precisar ver o contêiner que não está em execução, use docker ps -a.

5.docker commit <container_id>

Explicação: Ele transforma a camada legível e gravável no contêiner em uma camada somente leitura , transformando o contêiner em uma imagem imutável

Acho que você gosta

Origin blog.csdn.net/qq_33351639/article/details/129197393
Recomendado
Clasificación