Sobes.tech
Middle

Em que se base o isolamento de contêineres no Docker?

sobes.tech IA

Resposta da IA

O isolamento de contêineres no Docker baseia-se nas seguintes tecnologias e mecanismos principais do núcleo Linux:

  1. Namespaces (Espaços de nomes): Permitem isolar a visibilidade e o acesso aos recursos do sistema. O Docker usa vários tipos de Namespaces:

    • PID namespace: Isola os processos, cada contêiner vê apenas seus próprios processos (PID 1 dentro do contêiner).
    • Net namespace: Isola a pilha de rede (interfaces de rede, endereços IP, portas, regras de roteamento).
    • Mnt namespace: Isola os pontos de montagem do sistema de arquivos.
    • UTS namespace: Isola o hostname e o nome de domínio.
    • IPC namespace: Isola os recursos de comunicação entre processos (semaforos, memória compartilhada).
    • User namespace: Isola os IDs de usuário e grupo.
  2. Control Groups (cgroups): Permitem limitar e controlar o consumo de recursos do sistema (CPU, memória, I/O, tráfego de rede) para grupos de processos. O Docker usa cgroups para:

    • Limitar a quantidade de CPU ou a fração de tempo de processador.
    • Limitar a memória disponível.
    • Priorização ou limitação de entrada/saída de disco.
    • Limitar o tráfego de rede.
  3. Union File Systems (UnionFS): Criam camadas do sistema de arquivos. O Docker usa UnionFS como OverlayFS, AUFS (mais antigo), Btrfs. Permitem:

    • Criar camadas leves para as imagens do Docker.
    • Utilizar eficientemente o espaço em disco por meio do uso compartilhado de camadas base.
    • Ao registrar alterações no contêiner, criar camadas COW (Copy-on-Write), sem modificar a imagem base.
  4. Seccomp (Modo de computação segura): Limita as chamadas ao sistema (syscalls) que um processo pode realizar dentro do contêiner, reduzindo assim a superfície de ataque. O Docker usa perfis seccomp por padrão para a maioria dos contêineres.

  5. AppArmor / SELinux: Para maior segurança e isolamento, podem ser usados módulos de controle de acesso obrigatório (MAC), como AppArmor ou SELinux. Eles fornecem um controle mais granular sobre o que os processos podem fazer (por exemplo, acesso a arquivos, recursos de rede). O Docker pode usar perfis do AppArmor ou SELinux se estiverem configurados no sistema host.