Ukoliko se krećete u svetu virtuelizacije i kontejnerizacije, sigurno ste se susreli sa Podmanom i Dockerom i možda se pitate koje su njihove razlike.
U ovom tekstu ćemo istražiti distinkcije između Dockera i Podmana i pokušati utvrditi koji je pravi izbor za vas!
Docker
Docker je tehnologija kontejnerizacije koja pojednostavljuje upravljanje zavisnostima unutar projekta na svim nivoima, od razvoja do implementacije.
Dostupan za Linux, Windows i macOS, Docker mehanizam fokusira se na kontejnere i njihovu orkestraciju, a tu se kontejnerizacija razlikuje od virtuelizacije.
Docker ima dva glavna elementa: Docker CLI i Docker Daemon.
Docker Daemon:
To je trajni pozadinski proces koji asistira u upravljanju Docker slikama, kontejnerima, mrežama i prostorom za skladištenje. Docker koristi sopstveni Docker Engine REST API za komunikaciju sa Docker daemon-om, kojem se pristupa preko HTTP protokola.
Docker CLI:
Slika preuzeta sa: Redhat
To je Docker klijent komandne linije za interakciju sa Docker daemon-om. Njega koristite kada pokrećete bilo koju Docker komandu.
Rad Dockera temelji se na Linux kernelu i njegovim funkcijama kao što su cgroups i namespaces. Ove funkcije razdvajaju procese kako bi mogli funkcionisati nezavisno, jer je cilj kontejnera pokretanje više procesa i aplikacija odvojeno.
To omogućuje optimizaciju upotrebe infrastrukture bez smanjenja nivoa sigurnosti u poređenju sa zasebnim sistemima.
Svi alati za kontejnere, uključujući Docker, koriste model implementacije baziran na slici. Ovaj model olakšava deljenje aplikacije ili seta usluga u više okruženja.
Nadalje, Docker pomaže u automatizaciji implementacije aplikacija unutar kontejnerskog okruženja. Uz ove alate, korisnici dobijaju potpun pristup aplikacijama i mogu ubrzati implementaciju, kontrolisati verzije i dodeljivati ih.
Podman
Podman (Pod MANager) kreira, pokreće i upravlja OCI kontejnerima i slikama kontejnera. Razvio ga je Red Hat i prvobitno je bio namenjen za njihov Linux 8. Koristi se za upravljanje kontejnerima i smatra se zvaničnim naslednikom Dockera.
Red Hat je zbog toga prekinuo podršku za Docker, ali je uverio korisnike da će prelazak biti lak jer je Podman zasnovan na Dockeru, iako je prvobitno bio zamišljen samo kao alat za otklanjanje grešaka.
On upravlja celokupnim ekosistemom kontejnera koristeći libpod biblioteku. Budući da Podman radi samo na Linux platformama, REST API i klijenti su trenutno u razvoju kako bi omogućili macOS i Windows sistemima da pozovu uslugu.
Međutim, trenutno postoji udaljeni klijent zasnovan na Varlink-u koji radi na macOS ili Windows platformama i omogućava daljinsku komunikaciju sa Podman serverom zasnovanim na Linuxu. Libpod biblioteka podržava različite metode za sigurno učitavanje slika, uključujući verifikaciju i poverenje slika.
Takođe podržava podove za grupno upravljanje kontejnerima, i više formata slika, uključujući OCI i Docker formate.
U malim i jednostavnim okruženjima, Podman čak može poslužiti kao prethodnik Kubernetesu. On premošćuje jaz između jedinstvenog upravljanja pojedinačnim instancama iz ranijih dana i moderne orkestracije sa Kubernetesom.
Ambiciozni korisnici kontejnera već mogu uživati u narednom nivou sa podovima. Izgradnja i rad Kubernetes klastera više nisu potrebni. U jednostavnijem slučaju, novodizajnirani podovi se mogu testirati i poboljšati u pojedinačnim operacijama. Moguć je čak i prenos na Kubernetes.
Komanda podman generate kube isporučuje odgovarajuće konfiguracijske fajlove. Oni zatim služe kao direktan ulaz za Kubernetes alat kubectl.
Trenutne verzije Podmana mogu čak kreirati konfiguracione fajlove za systemd – pogodno za svakog ko koristi omniprisutnog init naslednika za orkestraciju kontejnera.
Podman protiv Dockera: Razlike
Docker se brzo afirmisao kao popularan izbor za upravljanje kontejnerima. Ipak, Docker ima mnoge prednosti, naročito veliki izbor slika, ali i nedostatke i potencijalne sigurnosne rizike. Pored toga, Docker više nije podržan kao kontejner za Kubernetes.
Činjenica da kontejneri, za razliku od virtuelnih sistema, ne zahtevaju sopstveno jezgro, obično se ističe kao velika prednost. Međutim, to predstavlja značajan sigurnosni rizik za Docker jer se Docker kontejneri mogu pokrenuti samo sa root privilegijama.
To omogućava procesima koji se izvršavaju unutar kontejnera pristup kernelu sa root privilegijama i na taj način napadaju host sistem.
Prva razlika je uočljiva pri samom startu. Dok Docker zahteva da se Docker daemon prvo pokrene, Podman kontejner se može direktno pokrenuti iz komandne linije. Dakle, ne postoji pozadinski proces, a aplikacija se izvršava samo kada je to potrebno.
Sa sigurnosnog stanovišta, ovo je dobro jer je Podman manje podložan napadima ako daemon ne mora raditi 24/7 sa superkorisničkim privilegijama. Podman ne zahteva pozadinski proces zbog svoje arhitekture, koja se bitno razlikuje od Docker-a.
Dok Docker koristi model klijent-server, gde Docker klijent komunicira sa Docker daemon-om putem API-ja, Podman prati model fork-exec. Svaki kontejner funkcioniše kao podređeni proces Podmana.
Korisnički prostor imena se kreira prilikom prve upotrebe kada se Podman pokrene sa standardnim korisničkim privilegijama. U korisničkom prostoru imena, Podman radi sa root privilegijama i ima pravo da montira sistem datoteka i kreira kontejnere.
Shodno tome, Podman kontejner ima samo prava koja ima korisnik koji ga izvršava. Upotreba korisničkih prostora imena znači da svaki korisnik može da kreira i upravlja svojim kontejnerima, ali oni nisu vidljivi drugim korisnicima niti superkorisniku.
Pošto Podman radi nezavisno od Dockera, programeri imaju više slobode i mogu da odgovore na zahteve zajednice. Značajni dodaci za Podman uključuju komandu mount/unmount i integraciju sa sistemom.
Host može da koristi mount/unmount komandu za montiranje sistema datoteka kontejnera, na primer, za pristup ili promenu datoteka, a zatim ih ponovo isključiti.
Dok nadgledanje kontejnera sa systemd-om ne funkcioniše sa Dockerom zbog njegovog daemon-a, sa Podmanom se kontejneri mogu pokrenuti, nadgledati i čak ponovo pokrenuti preko systemd-a.
Dodatno, Podman pruža komandu podman generate systemd, koja generiše odgovarajuću systemd uslugu za kontejner, oslobađajući korisnika od ručnog kreiranja systemd usluga, što znači da je integracija sa host sistemom dostupna.
Još jedna ključna razlika između Podmana i Dockera je što Docker ne menja pravila firewall-a ili trenutnu instalaciju dnsmask zbog svoje sposobnosti kreiranja interne mreže. Nasuprot tome, Docker mora da izmeni pravila firewall-a kako bi omogućio komunikaciju između kontejnera.
Podman | Docker | |
Arhitektura | Daemonless | Daemon |
Upravljanje servisima | Systemd | Docker Engine |
Kompatibilnost sa firewallom | Poštuje pravila firewall-a | Menja pravila firewall-a |
Platforma | Izvorna podrška za Linux | Linux, Windows i Mac |
Kada preći sa Dockera na Podman
Ako postavljate kontejnere u okruženju zasnovanom na RHEL-u, nemate puno izbora osim da koristite Podman jer je on izvorni za RHEL. Takođe, možete preći na Podman ili ga odabrati umesto Dockera ako imate male aplikacije sa nekoliko kontejnera.
Međutim, ako su vam potrebne složenije konfiguracije, veći broj kontejnera i koordinacija putem mreže sa docker-compose/podman-compose, bolje je koristiti Docker jer bolje upravlja mrežnim povezivanjem.
Slično tome, ako tek ulazite u svet kontejnera, Docker je bolja opcija jer je stabilan, dobro utemeljen sa odgovarajućom dokumentacijom, i ima jednostavniju krivu učenja u poređenju sa Podmanom, koji još uvek nema takvu stabilnost i detaljnu dokumentaciju.
Migracija sa Podmana na Docker
Ako radite u komandnoj liniji, prilično je lako preći sa Docker Engine-a na Podman. U osnovi, $ alias docker=podman će većinu vremena raditi posao.
Naravno, ovo podrazumeva da je potreban softver instaliran na sistemu. U slučaju Linuxa, to nije problem; gotovi softverski paketi su dostupni za najčešće distribucije.
Windows ili macOS nisu podržani. Pseudonim funkcionira jer mnoge Docker komande imaju ekvivalent u Podmanu.
Međutim, postoje i izuzeci jer neke Docker komande nemaju pandan u Podman svetu. Isto tako, neke komande se ponašaju različito u Dockeru nego u Podmanu. Trenutno, ovo se odnosi samo na manipulaciju već postavljenim volumenima.
Prebacivanje je malo teže kada se koriste grafički alati poput Docker Desktop-a. To će se naročito odraziti na programere koji rade sa Windowsom ili macOS-om.
Korisnici Docker Desktop-a će se morati naviknuti na komandnu liniju, a isto važi i za Docker compose. Međutim, postoji projekat podman-compose. Napisan u Pythonu, ovaj softver služi kao zamena za Docker compose.
Zaključak
Zamena Dockera sa Podmanom može se smatrati skoro završenom. Za korisnike i administratore, većina aspekata ove promene je jednostavna. Mnoge Docker funkcije imaju identične ekvivalente u Podmanu.
Prava prednost je odsustvo jedinstvenog daemon procesa i root privilegija, da ne spominjemo prirodnu upotrebu grupa kontejnera. Ipak, treba imati na umu da je Docker još uvek glavna tehnologija u vezi sa kontejnerima, ali je moguće da će se to promeniti u budućnosti.
Takođe možete istražiti neke Docker komande za upravljanje kontejnerima.