Docker schimbă jocul. Dar nu este o soluție unică.

Există multe lucruri bune despre Docker. Pachetează, livrează și rulează aplicații ca un instrument ușor, portabil și autosuficient de containerizare. Docker este excelent pentru companii de toate dimensiunile. Când lucrați la o bucată de cod într-o echipă mică, aceasta elimină problema „dar funcționează pe mașina mea”. Între timp, întreprinderile pot folosi Docker pentru a construi conducte de livrare de software Agile pentru a livra noi caracteristici mai rapid și mai sigur.

Cu sistemul său de containerizare încorporat, Docker este un instrument excelent pentru cloud computing. La rândul său, Docker Swarm avansează clusterizarea și designul descentralizat. Sună prea bine ca să fie adevărat, nu? Ei bine, există încă mai multe cazuri când nu se folosește Docker. Iată șapte dintre ele.

nu utilizați docker

Să le parcurgem pe rând.

Nu utilizați Docker dacă trebuie să măriți viteza

Containerele Docker sunt mai mici și necesită mai puține resurse decât o mașină virtuală cu un server și o bază de date. În același timp, Docker va folosi la fel de multe resurse de sistem pe care le va permite planificatorul de kernel al gazdei. Nu trebuie să vă așteptați ca Docker să accelereze în vreun fel o aplicație.

Mai mult, Docker ar putea chiar să o facă mai lentă. Dacă lucrați cu acesta, ar trebui să setați limite pentru câtă memorie, CPU sau IO bloc poate folosi containerul. În caz contrar, dacă nucleul detectează că memoria mașinii gazdă este prea slabă pentru a îndeplini funcții importante ale sistemului, ar putea începe uciderea proceselor importante. Dacă procesul greșit este ucis (inclusiv Docker-ul în sine), sistemul va fi instabil.

Din păcate, ajustările de memorie ale lui Docker – prioritatea de memorie de pe demonul Docker – nu rezolvă această problemă. În schimb, un strat suplimentar între o aplicație și sistemul de operare ar putea duce, de asemenea, la reducerea vitezei. Cu toate acestea, această scădere va fi nesemnificativă. Containerele Docker nu sunt complet izolate și nu conțin un sistem de operare complet ca orice mașină virtuală.

Nu utilizați Docker dacă acordați prioritate securității

Cel mai mare avantaj al securității Docker este că împarte aplicația în părți mai mici. Dacă securitatea unei părți este compromisă, restul acestora nu vor fi afectate.

Cu toate acestea, în timp ce procesele izolate din containere promit o securitate îmbunătățită, toate containerele partajează accesul la un singur sistem de operare gazdă. Ristiți să rulați containere Docker cu izolare incompletă. Orice cod rău intenționat poate avea acces la memoria computerului.

Există o practică populară de a rula o mulțime de containere într-un singur mediu. Acesta este modul în care vă faceți aplicația predispusă la atacurile de tip Resource Abuse, cu excepția cazului în care limitați capacitățile containerului de resurse. Pentru o eficiență și o izolare maxime, fiecare container trebuie să abordeze un domeniu specific de îngrijorare.

O altă problemă este configurația implicită a Docker – utilizatorii nu sunt denumiți. Spațiile de nume permit resurselor software să utilizeze alte resurse numai dacă aparțin unui anumit spațiu de nume.

Rularea aplicațiilor cu Docker implică rularea demonului Docker cu privilegii de root. Orice proces care iese din containerul Docker va avea aceleași privilegii pe gazdă ca și în container. Rularea proceselor în containere ca utilizator neprivilegiat nu poate garanta securitatea. Depinde de capacitățile pe care le adăugați sau le eliminați. Pentru a atenua riscurile de spargere a containerelor Docker, nu ar trebui să descărcați containere gata de utilizare din surse de încredere.

Nu utilizați Docker dacă dezvoltați o aplicație GUI pentru desktop

Docker nu se potrivește aplicațiilor care necesită interfață de utilizare bogată. Docker este destinat în principal containerelor izolate cu aplicații bazate pe consolă. Aplicațiile bazate pe interfața grafică nu sunt o prioritate, asistența lor se va baza pe caz și aplicație specifică. Containerele Windows se bazează fie pe Nano, fie pe Core Server – nu permite utilizatorilor să pornească o interfață bazată pe GUI sau un server Docker RDP în containerul Docker.

Totuși, poți totuși rulați aplicații bazate pe GUI dezvoltat cu Python și cadrul QT într-un container Linux. De asemenea, puteți utiliza redirecționarea X11, dar această soluție este oarecum incomodă.

Nu utilizați Docker dacă doriți să aprindeți dezvoltarea și depanarea

Docker a fost creat de dezvoltatori și pentru dezvoltatori. Oferă stabilitate mediului înconjurător: un container de pe mașina de dezvoltare va funcționa exact la fel în etapă, producție sau orice alt mediu. Aceasta elimină problema diferitelor versiuni de programe în diferite medii.

Cu ajutorul lui Docker, puteți adăuga cu ușurință o nouă dependență aplicației dvs. Niciun dezvoltator din echipa dvs. nu va trebui să repete această manipulare pe computerul lor. Totul va fi pus în funcțiune în container și distribuit întregii echipe.

În același timp, trebuie să faceți o configurare suplimentară pentru a vă codifica aplicația în Docker. Mai mult, cu depanarea Docker, trebuie să configurați ieșirea jurnalelor și să configurați porturile de depanare. Poate fi necesar să mapați porturile pentru aplicațiile și serviciile dvs. în containere. Deci, dacă aveți un proces de implementare complicat și obositor, Docker vă va ajuta foarte mult. Dacă aveți o aplicație simplă, aceasta adaugă doar complexitate inutilă.

Nu utilizați Docker dacă trebuie să utilizați diferite sisteme de operare sau nuclee

Cu mașinile virtuale, hipervizorul poate extrage un întreg dispozitiv. Puteți utiliza Microsoft Azure pentru a rula ambele instanțe de Windows Server și Linux Server în același timp. Cu toate acestea, imaginea Docker necesită același sistem de operare pentru care a fost creat.

Există o bază de date mare de imagini container Docker – Docker Hub. Cu toate acestea, dacă a fost creată o imagine pe Linux Ubuntu, aceasta va rula doar pe același Ubuntu.

Dacă o aplicație este dezvoltată pe Windows, dar producția rulează pe Linux, nu veți putea utiliza Docker în mod eficient. Uneori, este mai ușor să configurați un server dacă aveți mai multe aplicații statice.

Nu utilizați Docker dacă aveți de stocat o mulțime de date valoroase

Prin proiectare, toate fișierele Docker sunt create într-un container și stocate pe un strat de container care se poate scrie. Poate fi dificil să extrageți datele din container dacă este nevoie de un alt proces. De asemenea, stratul inscripționabil al unui container este conectat la mașina gazdă pe care rulează containerul. Dacă trebuie să mutați datele în altă parte, nu o puteți face cu ușurință. Mai mult decât atât, toate datele stocate în interiorul unui container se vor pierde pentru totdeauna după închiderea acestuia.

Mai întâi trebuie să vă gândiți la modalități de a vă salva datele în altă parte. Pentru a păstra datele în siguranță în Docker, trebuie să utilizați un instrument suplimentar – Volumele de date Docker. Cu toate acestea, această soluție este încă destul de neîndemânatică și trebuie îmbunătățită.

Nu utilizați Docker dacă căutați cea mai ușoară tehnologie de gestionat

Fiind introdus în 2012, Docker este încă o tehnologie nouă. În calitate de dezvoltator, poate fi necesar să actualizați regulat versiunile Docker. Din păcate, compatibilitatea inversă nu este garantată. Mai mult, documentația se află în spatele progresului tehnologiei. În calitate de dezvoltator, va trebui să vă dați seama singuri.

În plus, opțiunile de monitorizare oferite de Docker sunt destul de slabe. Puteți obține o perspectivă rapidă asupra unor statistici simple. Cu toate acestea, dacă doriți să vedeți câteva funcții avansate de monitorizare, Docker nu are nimic de oferit.

De asemenea, în cazul unei aplicații mari și complexe, implementarea Docker are un cost. Construirea și menținerea comunicării între numeroase containere pe numeroase servere va necesita mult timp și efort. Cu toate acestea, există un instrument util, care facilitează lucrul cu aplicațiile Docker cu mai multe containere – Docker Compose. Docker Compose definește serviciile, rețelele și volumele într-un singur fișier YAML.

Cu toate acestea, ecosistemul Docker este destul de fracturat – nu toate produsele suport pentru containere funcționează bine între ele. Fiecare produs este susținut de o anumită companie sau comunitate. Concurența aprinsă dintre acestea are ca rezultat incompatibilitatea produsului.

Pentru a încheia

Profesioniștilor KeenEthics le place să lucreze cu Docker și îl folosesc adesea pentru dezvoltarea aplicațiilor. În ciuda unor dezavantaje, îl puteți folosi cu ușurință pentru a rula și gestiona aplicații unul lângă altul în containere izolate.

Instalarea unei aplicații poate fi la fel de simplă ca executarea unei singure comenzi – . Docker oferă, de asemenea, un mediu de izolare curat și original pentru fiecare test, făcându-l un instrument important și util pentru testarea automatizării.

Funcțiile Docker oferă avantaje în ceea ce privește gestionarea dependenței și securitatea. Mărit cu instrumente utile precum Docker Hub, Docker Swarm și Docker Compose, Docker este o soluție populară și ușor de utilizat.

În ciuda tuturor beneficiilor Docker, nu ar trebui să-l utilizați pentru a containeriza fiecare aplicație pe care o dezvoltați.

Nu uitați: Docker schimbă jocul. Dar nu este o soluție unică.

Nici Docker nu este singurul astfel de instrument pe piață. Alternativele Docker sunt rkt, pronunțat ca „rachetă”, Containere Linux, sau OpenVZ. Fiecare dintre acestea, cu avantajele și dezavantajele sale, este destul de similar cu Docker. Popularitatea în creștere și ratele de utilizare ale Docker sunt cauzate doar de decizia companiilor de a-l adopta.

Înainte de a trece la concluzii, ar trebui să utilizați Docker sau nu, căutați cerințele proiectului. Discutați cu colegii de echipă sau colegii dvs. și lăsați-i să vă ajute să decideți când să utilizați Docker, când să nu folosiți containere și dacă este unul dintre acele cazuri de utilizare Docker.

Indiferent dacă vă place sau nu, această tehnologie are viitor. Există unii dezvoltatori și agenții de dezvoltare care urăsc Docker și încearcă să-l elimine din toate proiectele lor în desfășurare. În același timp, există specialiști care pun în container tot ce pot pentru că îl văd pe Docker ca pe un panaceu. Poate că nu ar trebui să vă alăturați oricărei tabere. Rămâneți imparțial, rămâneți obiectiv și luați o decizie în funcție de o anumită situație.

Ai o idee pentru un proiect Docker?

Compania mea KeenEthics este o echipă cu experiență dezvoltatori de aplicații web. În cazul în care aveți nevoie de o estimare gratuită a unui proiect similar, nu ezitați Intrați în legătură.

Puteți citi mai multe articole similare pe blogul meu Keen. Permiteți-mi să vă sugerez să citiți De ce să vă refactorizați codul? sau Modele de dezvoltare software explicate: externalizare vs personal, preț fix vs timp și material?

PS

De asemenea, aș dori să spun „mulțumesc” pentru Alex Pletnov pentru coautorarea acestui articol, precum și a cititorilor pentru a ajunge la final!

Articolul original postat pe blogul KeenEthics poate fi găsit aici: 7 cazuri când nu se utilizează Docker.