Docker Container vs VM

Motivace

Z článku se dozvíte rozdíl mezi kontejnerem a virtuálním strojem, a to že kontejner není virtuální stroj, ale je to pouze jednoduše řečeno proces. Docker aktivně používám od roku 2016. Všechno co bylo potřeba jsem zvládnul vytvořit. Ať už šlo o lokální vývoj, kde je potřeba debuggovat, hot reload, nastavení síti mezi více servicema, CI/CD atd. To samé se jedná o produkci, kde potřebujete finální image. Přesto si myslím, že mám prostor, kde se zlepšit a proto jsem se rozhodl, že to celé vezmu od instalace až po Kubernetes a Swarm. Veškeré poznámky si píšu do sešitu. Ty zajímavější věci budu sdílet na svém blogu. Pokud se chcete k mé tvorbě vyjádřit nebo mě sledovat, můžete prostřednictvím Instagramu nebo LI.

Možnosti

Virtual Machines

Virtual Machines with Containers

Containers on Bare Metal

Motivace

Docker je flexibilní. Je hodně flexibilní. Docker můžete rozjet kdekoliv, od OS, železa po cloud. Další výhodou je rychlost spuštění jednoho kontejneru, nečekáte než se vám spustí celý stroj.

VM (virtual machine)

Kontejner není VM

  • komplexní výpočetní prostředí pro běh aplikace a persistentní data
  • emulace fyzického stroje / hardwaru
  • interakce s fyzickým strojem přes vrstvu zvanou hypervisor
  • hypervisory mohou od sebe oddělit VM a přidělit mezi ně CPU, RAM a úložiště
  • admin system musí provádět update běžících strojů

Container

  • je to proces v Docker Enginu
  • obsahuje minimální binárky pro supštění
  • je pouze read-only a immutable
  • proč je na macOS/WIN tak pomalé a na Linuxu to krásně běhá:
    • Linux je pro Docker nativní OS a má přímé mapování souboru
    • macOS má ještě jednu překládací vrstvu osxfs a ta to celé zpomaluje
    • na Win bude podobný problém
  • využívá funkce OS k izolaci procesů, nemá vlastní kernel, ale využívá kernel OS

Důkaz místo slibu

Pusťte si Docker a jakýkoli kontejner. Třeba:

docker container run -d nginx

Přístup do kontejneru s root právy do Moby VM:

docker run -it --rm --privileged --pid=host justincormack/nsenter1

Pro zobrazení našeho běžícího procesu nginx

ps aux | grep nginx

A to je vše! 🙂 Budou další články. Dotazy do postu na instagramu.

Díky za korekci a podněty:

https://www.linkedin.com/in/marek-braun-a6a025140/

Inspirováno:

https://github.com/mikegcoleman/docker101/blob/master/Docker_eBook_Jan_2017.pdf

https://www.bretfisher.com/docker-for-mac-commands-for-getting-into-local-docker-vm/