- virtualiza a hierarquia do sistema de arquivos
Ele usa namespaces de montagem. É mais poderoso que chroot
porque você pode montar e desmontar sistemas de arquivos sob o seu namespace e eles ficarão ocultos do lado de fora ou de outros namespaces de montagem.
Dê uma olhada em este artigo nos namespaces do Linux (e, em particular, monte namespaces) para ter uma visão geral do que eles fazem.
- e também a árvore de processos
Isso significa que você obtém novos números de PID dentro do namespace. PID 1 dentro do namespace pode ser PID 12001 fora dele, PID 40 dentro dele pode estar fora do PID 13987, e assim por diante. Em particular, nem todos os PIDs são mapeados dentro do namespace, portanto, se você usar um comando como ps -ef
dentro dele, verá apenas os processos que estão nesse namespace, e não aqueles do lado de fora ou de outros namespaces de pid .
O artigo mencionado acima também oferece uma boa visão geral dos namespaces do PID.
- vários subsistemas IPC
Memória compartilhada, semáforos ... O material mostrado pelo comando ipcs
. Mais uma vez, esse artigo que eu apontei tem um pouco mais sobre isso. (Se você ainda não ouviu falar do SysV IPC ou do comando ipcs
, você provavelmente pode ignorar este.)
- host e nome de domínio
Este é, na verdade, o namespace UTS e, mais uma vez, esse artigo tem mais detalhes.
Ele virtualiza o retorno do comando uname
(você pode dar uma olhada em uname -a
dentro do contêiner.) Além disso, os comandos hostname
e domainname
. Sim, os dois arquivos /proc
que você mencionou também.
Em suma, isso significa que systemd-nspawn
está usando namespaces do Linux para fornecer isolamento de contêiner. Isso também é o que outras tecnologias de contêiner (como o Docker) empregam.
Espero que isso ajude!