Podman vs Docker: pe care să alegi?

Dacă sunteți în lumea virtualizării și a containerizării, probabil că ați întâlnit Podman și Docker și s-ar putea să vă întrebați în ce fel sunt diferite unul de celălalt.

În această postare, vom explora diferențele dintre Docker și Podman și vom încerca să găsim care dintre ele va fi alegerea potrivită pentru tine!

Docher

Docker este o tehnologie de containerizare care facilitează gestionarea dependenței în cadrul unui proiect la toate nivelurile (dezvoltare și implementare).

Disponibil pe Linux, Windows și Mac OS, mecanismul Docker se concentrează pe containere și orchestrarea acestora, iar aici containerizarea diferă de virtualizare.

Docker are două blocuri principale: Docker CLI și Docker Daemon.

Docker Daemon:

Este un proces de fundal constant care ajută la gestionarea imaginilor, containerelor, rețelelor și volumelor de stocare Docker. Docker utilizează API-ul său REST Docker Engine pentru a interacționa cu demonul Docker, accesat prin protocolul HTTP.

Docker CLI:

Credit imagine: Redhat

Este clientul de linie de comandă Docker pentru interacțiunea cu demonul Docker. Este ceea ce utilizați când rulați orice comandă Docker.

Funcționarea Docker se bazează pe nucleul Linux și pe funcțiile acestui nucleu, cum ar fi cgroups și namespaces. Aceste funcții separă procesele astfel încât să poată rula independent, deoarece scopul containerelor este de a rula mai multe procese și aplicații separat.

Acesta este ceea ce face posibilă optimizarea utilizării infrastructurii fără a reduce nivelul de securitate în comparație cu sistemele separate.

Toate instrumentele pentru containere precum Docker vin cu un model de implementare bazat pe imagini. Acest model simplifică partajarea unei aplicații sau a unui set de servicii în mai multe medii.

În plus, Docker ajută la automatizarea implementării aplicațiilor într-un mediu container. Cu aceste diverse instrumente, utilizatorii obțin acces deplin la aplicații și pot accelera implementarea, controla versiunile și le pot atribui.

Podman

Podman (MANagerul POD) construiește, rulează și gestionează containerele OCI și imaginile containerelor. A fost dezvoltat de Red Hat și destinat inițial pentru întreprinderea sa Linux 8. Este folosit pentru gestionarea containerelor și acționează ca succesor oficial al Docker.

În consecință, Red Hat a întrerupt suportul pentru Docker, dar a asigurat că comutarea va fi ușoară pentru utilizatori, deoarece Podman se bazează pe Docker, deși inițial a fost conceput doar ca un instrument de depanare.

  Consultați Orele de lucru obișnuite atunci când planificați întâlniri pe fusuri orare

Gestionează întregul ecosistem de containere folosind biblioteca libpod. Deoarece Podman funcționează numai pe platformele Linux, un API REST și clienți sunt în prezent în dezvoltare pentru a permite sistemelor Mac și Windows să apeleze serviciul.

Cu toate acestea, există în prezent un client la distanță bazat pe Varlink care funcționează pe platforme Mac sau Windows care permite comunicarea de la distanță cu un server Podman bazat pe Linux. Biblioteca libpod acceptă mai multe metode de a încărca imagini în siguranță, inclusiv încredere și verificarea imaginii.

De asemenea, acceptă pod-uri pentru a gestiona grupuri de containere împreună și mai multe formate de imagine, inclusiv formate de imagine OCI și Docker.

În medii foarte mici și ușor de gestionat, Podman poate servi chiar și ca un precursor al Kubernetes. Face o punte între gestionarea singulară a instanțelor individuale din primii ani ai hype-ului containerelor și orchestrarea modernă cu Kubernetes.

Utilizatorii ambițioși de containere se pot bucura deja de următorul nivel cu capsulele. Construirea și operarea unui cluster Kubernetes nu mai sunt necesare. În cel mai simplu caz, podurile nou proiectate pot fi testate și îmbunătățite în operațiuni individuale. Chiar și un transfer ulterior către Kubernetes este posibil.

Comanda podman generate kube furnizează fișierele de configurare corespunzătoare. Acestea servesc apoi unu-la-unu ca intrare pentru instrumentul Kubernetes kubectl.

Versiunile actuale de Podman pot chiar să creeze fișiere de configurare pentru systemd – un deliciu pentru oricine folosește succesorul omniprezent init pentru orchestrarea containerelor.

Podman vs Docker: diferențe

Docker s-a impus rapid ca hobby-horse pentru gestionarea containerelor. Cu toate acestea, Docker are multe avantaje și, mai ales, repertoriul de imagini în creștere rapidă, precum și dezavantaje și posibile riscuri de securitate. Mai mult, Docker nu mai este acceptat ca container pentru Kubernetes.

Faptul că containerele, spre deosebire de sistemele virtuale, nu necesită nucleul lor este de obicei văzut ca unul dintre marile avantaje. Cu toate acestea, prezintă un risc major de securitate pentru Docker, deoarece containerele Docker pot fi rulate numai cu privilegii de rădăcină.

Permite proceselor care rulează în containere să acceseze nucleul cu privilegii de rădăcină și astfel să atace sistemul gazdă.

Prima distincție este evidentă atunci când o utilizați pentru prima dată. În timp ce Docker necesită ca daemonul Docker să fie pornit mai întâi, un container Podman poate fi pornit direct din linia de comandă. Deci nu există un proces de fundal, iar aplicația este executată doar atunci când este necesar.

  Cum mă înscriu la Talkatone

Din punct de vedere al securității, acest lucru este bun deoarece Podman este mai puțin vulnerabil la atac dacă demonul nu trebuie să ruleze 24/7 cu privilegii de superutilizator. Podman nu necesită un proces de fundal din cauza arhitecturii, care diferă fundamental de Docker.

În timp ce Docker urmează modelul client-server, în care clientul Docker comunică cu demonul Docker printr-un API, Podman urmează modelul fork-exec. Fiecare container rulează ca un proces copil al Podman.

Un spațiu de nume de utilizator este creat la prima utilizare când Podman este rulat cu privilegii normale de utilizator. În spațiul de nume de utilizator, Podman rulează cu privilegii root și are drepturi de a monta sisteme de fișiere și de a crea containere.

În consecință, containerul Podman are doar drepturile pe care le are utilizatorul care execută. Utilizarea spațiilor de nume de utilizator înseamnă că fiecare utilizator își poate crea și gestiona propriile containere, dar acestea nu sunt vizibile pentru alți utilizatori și superutilizator.

Deoarece Podman este operat independent de Docker, dezvoltatorii au o mare marjă de manevră și pot răspunde dorințelor comunității. Adăugările interesante la Podman includ comanda mount/unmount și integrarea systemd.

Gazda poate folosi comanda mount/unmount pentru a monta sistemul de fișiere al containerului, de exemplu, pentru a accesa sau a modifica fișiere și apoi a le demonta din nou.

În timp ce monitorizarea containerelor folosind systemd nu funcționează din cauza demonului din Docker cu Podman, containerele pot fi pornite, monitorizate și chiar repornite prin systemd.

În plus, Podman oferă comanda podman generate systemd, care generează un serviciu systemd corespunzător pentru containerul respectiv și, astfel, scutește utilizatorul de crearea serviciilor systemd, ceea ce înseamnă că integrarea pe sistemul gazdă este disponibilă.

O altă diferență crucială între Podman și Docker este că acesta din urmă nu modifică regulile firewall-ului sau instalarea curentă a dnsmasq din cauza capacității sale de a crea o rețea internă. În schimb, Docker trebuie să suprascrie regulile paravanului de protecție pentru a permite comunicarea între containere.

PodmanDockerArchitecture DaemonDaemon lessSistem de management al serviciilordDocker Engine Compatibilitate firewall Suprascrie regulile firewall Respectă regulile firewallPlatform Suport nativ pentru linuxLinux, Windows și Mac

Când ar trebui să migrați de la Docker la Podman

Dacă implementați containere într-un mediu bazat pe RHEL, în acest caz, nu aveți multe opțiuni, cu excepția utilizării Podman, deoarece este nativ RHEL. De asemenea, puteți să migrați sau să alegeți Podman în locul Docker dacă aveți implementări mici cu puține containere.

  Remediați codul de eroare Roku 018

Cu toate acestea, dacă doriți să deveniți mai complex decât atât, aveți mai multe containere și un teanc de containere coordonate cu docker-compose/podman-compose într-o rețea. Este mai bine să utilizați Docker, deoarece gestionează mult mai bine rețelele.

În mod similar, dacă abia începeți să intrați în lumea containerelor, în acest caz, Docker este o opțiune mai bună, deoarece este stabil, bine stabilit cu documentație adecvată și are o curbă de învățare superficială în comparație cu Podman, căruia îi lipsește încă stabilitate și nu are o documentație bine definită.

Migrarea de la Podman la Docker

Dacă sunteți pe linia de comandă, este destul de ușor să treceți de la Docker Engine la Podman. Cel mai simplu, un alias $ face comanda docker=podman de cele mai multe ori funcționează.

Desigur, aceasta presupune că software-ul corespunzător este instalat pe sistem. În cazul Linux, nici aceasta nu este o problemă; Pachete software gata făcute sunt disponibile pentru distribuțiile disponibile comercial.

Windows sau macOS nu se numără printre sistemele de operare acceptate. Abordarea alias funcționează deoarece multe comenzi Docker au un echivalent Podman.

Dar există și excepții, deoarece unele comenzi Docker nu au o contrapartidă în lumea Podman. În mod similar, unele comenzi se comportă diferit în Docker decât în ​​universul Podman. În acest moment, acest lucru afectează doar gestionarea volumelor care au fost deja configurate.

Comutarea este puțin mai dificilă atunci când instrumente grafice, cum ar fi Docker Desktop, sunt în uz. Ar trebui să afecteze în special acei dezvoltatori care lucrează cu Windows sau macOS.

Utilizatorii Docker Desktop vor trebui să se obișnuiască cu linia de comandă și același lucru este valabil și pentru Docker Compose. Cu toate acestea, există proiectul podman-compose. Scris în Python, software-ul servește ca înlocuitor pentru Docker compose.

Cuvinte finale

Înlocuirea lui Docker cu Podman poate fi considerată aproape finalizată. Pentru utilizatori și administratori, cele mai multe aspecte ale acestei schimbări sunt simple. Multe funcții Docker au echivalente identice în Podman.

Un beneficiu real este lipsa unui proces demon singular și a privilegiilor root, ca să nu mai vorbim de utilizarea naturală a grupurilor de containere. Cu toate acestea, merită menționat faptul că Docker rămâne principala tehnologie în ceea ce privește containerele, dar acest lucru se va schimba cel mai probabil pe termen lung.

De asemenea, puteți explora câteva comenzi Docker pentru a gestiona containerele.