O Docker é jogado no intervalo de virtualização, porque as pessoas supõem que, de alguma forma, estão virtualizando o hardware por baixo. Isso é um equívoco que permeia a terminologia usada pelo Docker, principalmente o termo container.
No entanto, o Docker não está fazendo nada de mágico com relação à virtualização do hardware de um sistema. Em vez disso, está fazendo uso da capacidade do Kernel Linux de construir "cercas" em torno de recursos-chave, o que permite que um processo interaja com recursos como rede, sistema de arquivos e permissões (entre outras coisas) para dar a ilusão de que você está interagindo com um sistema totalmente funcional.
Veja um exemplo que ilustra o que está acontecendo quando iniciamos um contêiner do Docker e, em seguida, o inserimos por meio da invocação de /bin/bash
.
$ docker run -it ubuntu:latest /bin/bash
root@c0c5c54062df:/#
Agora de dentro desse contêiner, se executarmos ps -eaf
:
MudandoparaoutraguiadoterminalondeestamosconectadosaosistemahostquehospedaocontêinerdoDocker,podemosveroespaçodoprocessoqueocontêinerestá"realmente" ocupando:
Agora,sevoltarmosàabadoDockerelançarmosváriosprocessosdentrodelaecontextualizá-los,poderemosverqueagoratemosváriosprocessos-filhosemexecuçãonoprocessoBashprimárioqueiniciamosoriginalmentecomopartedolançamentodocontêinerDocker.
OBSERVAÇÃO:Osprocessossão4%doscomandossleep1000
queestãosendousadosemsegundoplano.
Observecomo,dentrodocontêinerDocker,osprocessossãoatribuídosaIDsdeprocesso(PIDs)de48-51.Veja-osnasaídaps-eaf
emseustambém:
Noentanto,comessapróximaimagem,grandeparteda"mágica" que o Docker está realizando é revelada.
Vejacomoosprocessosde4sleep1000
sãorealmenteprocessosfilhosparaonossoprocessoBashoriginal?ObservetambémqueonossocontêinerDockeroriginal/bin/bash
é,naverdade,umprocessofilhoparaodaemondoDockertambém.
Agora,seesperarmosmaisde1.000segundosparaqueoscomandossleep1000
originaissejamconcluídose,emseguida,executemosmais4novos,einiciaremosoutrocontêinerdoDockerassim:
$dockerrun-itubuntu:latest/bin/bashroot@450a3ce77d32:/#
Asaídadocomputadorhostdeps-eaf
ficariaassim:
EoutroscontêineresdoDockerserãoexibidosapenascomoprocessosnodaemondoDocker.
Então,oDockerrealmentenãoestávirtualizando(nosentidotradicional),estáconstruindo"cercas" em torno dos vários recursos do Kernel e limitando a visibilidade a eles para um determinado processo + filhos. / p>