Bogdan's Docs

Table of Contents

Table of Contents

  • Containere și Aplicații
    • Demoni
    • chroot
    • Mașini Virtuale
    • Containere

Ideas

  • Artificial Intelligence
    • Bond Pricing
    • Kubernetes Inference
    • Knowledge Bot
    • Ready to Use Models
    • Satellite Damage Detection

Curs IoT si AI (ro) Resources

  • Links
    • Artificial Intelligence
  • Recipes
    • MacOS
Bogdan's Docs
Docs » iot-si-ai:containere-si-aplicatii

Containere și Aplicații

Demoni

Un demon de Linux (sau serviciu de sistem) este un program care rulează în fundal și execută anumite sarcini fără a fi necesară o intervenție umană continuă. Aceste programe sunt menite să ruleze pe întreaga durată de funcționare a sistemului de operare și sunt de obicei pornite în timpul procesului de boot al sistemului. Demoni de Linux pot efectua o varietate de sarcini, precum administrarea serviciilor de rețea, monitorizarea sistemului, efectuarea de copii de siguranță a datelor, procesarea datelor sau rulează diverse servicii de server, cum ar fi serverele web sau serverele de baze de date. Demoni de Linux pot fi controlați și configurati prin intermediul utilitarelor specifice de gestionare a serviciilor, cum ar fi systemctl, service sau init.d.

Există mai multe motive pentru a construi o aplicație nouă pentru Linux ca demon:

  • Funcționalitate în background: Unele aplicații necesită să ruleze în background pentru a funcționa corespunzător. De exemplu, un server web, un server de baze de date sau un daemon care monitorizează sistemul și îndeplinește anumite sarcini în mod automat.
  • Performanță îmbunătățită: Un demon poate fi proiectat să ruleze în mod continuu, evitând astfel costurile de pornire și oprire ale aplicației la fiecare utilizare. În plus, un demon poate fi optimizat pentru a funcționa cu resurse reduse, consumând mai puțină memorie și putere de procesare decât o aplicație standard.
  • Control și configurabilitate: Demoni de sistem pot fi configurate pentru a rula cu anumite opțiuni sau parametri, precum și pentru a fi controlate prin intermediul comenzilor sau a interfețelor specifice.
  • Integrare cu alte aplicații: O aplicație demon poate fi utilizată pentru a îmbunătăți integrarea și comunicarea între diverse aplicații și servicii.

În general, construirea unei aplicații demon poate oferi o mai bună performanță și flexibilitate decât construirea unei aplicații standard în Linux.

Un demon simplu scris in bash pentru Raspberry Pi OS poate arata astfel:

#!/bin/bash
 
while true
do
    echo "Hello, world!" >> /var/log/mydaemon.log
    sleep 60
done

Acest script contine o bucla while true care ruleaza la nesfarsit si afiseaza mesajul Hello, world! in fisierul /var/log/mydaemon.log o data pe minut, utilizand comanda echo.

Pentru a face demonul să pornească la boot, trebuie să creați un fișier de unitate pentru systemd. Unitatea descrie modul în care demonul trebuie să fie gestionat de systemd și include informații precum comanda de pornire, calea către fișierul de configurare și alte opțiuni.

Pentru a crea un fișier de unitate, trebuie să creați un fișier cu extensia .service în directorul /etc/systemd/system/. De exemplu, dacă numele fișierului de unitate este mydaemon.service, iar scriptul pentru demon se afla in /usr/bin/mydaemon.sh', in /etc/systemd/system/mydaemon.service puteți adăuga următorul conținut ca exemplu: <code conf> [Unit] Description=My daemon After=network.target [Service] ExecStart=/usr/bin/mydaemon Restart=always User=myuser Group=mygroup EnvironmentFile=/etc/mydaemon.conf [Install] WantedBy=multi-user.target </code> Aici, ExecStart reprezintă comanda de pornire a demonului, Restart specifică modul în care demonul trebuie să fie restartat în cazul unui eșec, User și Group indică utilizatorul și grupul sub care trebuie să ruleze demonul, iar EnvironmentFile specifică calea către fișierul de configurare. În fișierul de configurare al serviciului, secțiunea Unit specifică dependințele de care depinde serviciul și ordinea de pornire a acestuia. În cazul exemplului anterior, linia After=network.target specifică faptul că serviciul trebuie să fie pornit după ce a fost pornit serviciul network.target. Secțiunea Install specifică modul în care serviciul este instalat și configurat să pornească la boot. Linia WantedBy=multi-user.target indică faptul că serviciul trebuie să fie pornit atunci când este selectat nivelul de pornire multi-user.target. Acest nivel de pornire este utilizat în mod obișnuit în sistemele de operare bazate pe Linux pentru a porni în mod implicit în modul cu linie de comandă cu utilizatori multipli. După ce ați creat fișierul de unitate, trebuie să actualizați lista de unități a systemd folosind comanda: <code bash> sudo systemctl daemon-reload </code> Pentru a porni demonul imediat, utilizați comanda: <code bash> sudo systemctl start mydaemon.service </code> Pentru a face ca demonul să pornească automat la boot, utilizați comanda: <code bash> sudo systemctl enable mydaemon.service </code> De acum înainte, demonul ar trebui să pornească automat la boot și să fie gestionat de systemd''.

chroot

chroot este o comandă disponibilă în sistemele de operare Linux și Unix, care permite modificarea rădăcinii directorului curent pentru procesul în care este executată. Aceasta are ca efect izolarea procesului într-un mediu virtual separat, cu propriile sale resurse de sistem (director de rădăcină, sistem de fișiere, set de biblioteci, etc.).

De obicei, chroot este folosit pentru a crea un mediu izolat și controlat, în care să se execute aplicații sau servicii fără a afecta restul sistemului de operare. De exemplu, poate fi folosit pentru a testa o versiune nouă a unei aplicații fără a o instala în mod explicit pe sistemul de operare principal, sau pentru a oferi un mediu de lucru separat pentru dezvoltatori.

O altă utilizare obișnuită a chroot este de a fi folosit în combinație cu alte tehnologii, cum ar fi ssh, sftp, ftp, rsync, scp, pentru a restrânge accesul la o anumită parte a sistemului de fișiere. De exemplu, poate fi utilizat pentru a restrânge accesul unui utilizator la un singur director, limitând astfel posibilitatea acestuia de a vizualiza sau modifica alte fișiere sau directoare din sistem.

Mașini Virtuale

O mașină virtuală (VM) este o emulare a unei mașini fizice de calcul într-un mediu software. Acesta constă într-un sistem de operare complet, inclusiv aplicații și resurse hardware virtuale, cum ar fi procesor, memorie, stocare și interfețe de rețea. Utilizatorul poate rula aplicații și software pe o mașină virtuală la fel ca pe o mașină fizică, cu excepția faptului că toate resursele hardware sunt simulate de software.

VM-urile sunt utilizate pentru a rula diferite aplicații și software într-un mediu izolat, ceea ce face posibilă utilizarea mai multor aplicații și sisteme de operare pe același hardware fizic. De asemenea, acestea sunt utilizate frecvent pentru dezvoltarea și testarea software-ului, precum și pentru a oferi medii de testare pentru aplicații web și servere.

Există diferite tehnologii și programe care permit crearea și gestionarea mașinilor virtuale, cum ar fi VirtualBox, VMware, Hyper-V, Xen și altele.

Containere

Un container este o unitate de software care încorporează toate dependențele necesare pentru ca o aplicație să ruleze independent pe un sistem de operare gazdă. Într-un container, aplicația este ambalată împreună cu toate bibliotecile și dependențele sale, astfel încât să nu fie necesară instalarea lor pe sistemul gazdă.

Un container poate fi considerat un mediu izolat pentru aplicații, similar unei mașini virtuale, dar cu un overhead mult mai mic și o abordare mai eficientă din punct de vedere al resurselor. Prin utilizarea containerelor, se poate asigura că aplicația rulează într-un mod consistent, fără a fi influențată de alte aplicații sau modificări aduse sistemului gazdă. De asemenea, containerul poate fi creat, mutat și replicat rapid, ceea ce îl face util pentru implementarea de aplicații scalabile și distribuite.

Atât containerele cât și chroot-urile sunt mecanisme de izolare a proceselor într-un sistem de operare. Cu toate acestea, există diferențe semnificative între cele două:

  • Chroot este o modalitate de a crea un mediu izolat pentru procese în interiorul sistemului de fișiere existent. Practic, chroot schimbă directorul rădăcină (/) al unui proces, astfel încât acesta să creadă că sistemul de fișiere începe din acel director specific. Acest proces nu are acces la fișierele din afara acestui mediu izolat, însă rămâne capabil să vadă toate resursele de sistem, inclusiv dispozitivele hardware și procesele de sistem. Chroot nu oferă o izolare de sistem completă și procesele rămân capabile să acceseze alte resurse de sistem, cum ar fi rețeaua.
  • Un container este un mediu izolat complet, care include nu numai un sistem de fișiere izolat, ci și resurse de sistem izolate, cum ar fi procesele, utilizatorii și grupurile, rețelele și așa mai departe. Un container este de obicei creat utilizând o tehnologie de virtualizare la nivelul sistemului de operare, cum ar fi Docker sau LXC, și poate rula mai multe procese izolate, toate folosind același kernel de sistem de operare. Acest lucru îi conferă o mai mare izolare și securitate decât chroot.

În general, chroot este utilizat pentru a crea un mediu izolat temporar, cum ar fi în timpul instalării unui nou sistem de operare sau a unei aplicații noi, în timp ce containerele sunt utilizate pentru a rula aplicații și servicii izolate în producție.

Atât containerele cât și mașinile virtuale (VM) permit rularea unui sistem de operare și a aplicațiilor pe o platformă hardware fizică. Cu toate acestea, există câteva diferențe importante între ele.

Un container utilizează același kernel cu sistemul gazdă și rulează într-un spațiu izolat. Aceasta înseamnă că containerele sunt mult mai ușoare decât mașinile virtuale și necesită mai puține resurse pentru a rula aceeași aplicație. În plus, crearea unui container este mult mai rapidă decât crearea unei mașini virtuale, deoarece nu trebuie să se creeze un sistem de operare virtualizat complet.

Pe de altă parte, mașinile virtuale sunt mult mai izolate decât containerele. Fiecare mașină virtuală rulează propriul său kernel și sistem de operare virtualizat, ceea ce le face mult mai sigure și mai robuste decât containerele. În plus, mașinile virtuale oferă o mai mare flexibilitate, deoarece pot rula diferite sisteme de operare și aplicații care necesită resurse hardware diferite.

În general, dacă dorești să rulezi mai multe instanțe ale aceleiași aplicații, atunci containerele sunt o opțiune mai bună, deoarece sunt mai ușoare și mai eficiente din punct de vedere al resurselor. Însă, dacă dorești să rulezi aplicații diferite sau să separi complet medii diferite de lucru, atunci mașinile virtuale sunt o alegere mai potrivită.

Previous Next