Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.
Prijevodi ove stranice:

Docker - kontenjeri

Sažetak

Virtualizacija je danas vrlo česta pojava u složenim računalnim sustavima i postoji nekoliko vrsta virtualizacija. Tekst prezentira virtualizaciju preko Docker kontenjera te iznosi usporedbu za dosadašnjim tehnikama virtualizacija. Iznosi se strktura Docker slike iz koje se pokreće kontenjer. Predstavljen način pohrane podataka preko Docker kontenjera te su navedeni načini i stvari na koje računalni forenzičar mora obratiti pozornost.

Ključne riječi: kontenjer; Docker; slika; virtualizacija;

Uvod

Virutalni strojevi nisu velika novost u svijetu računarstva te danas su sastavni njezin sastavni dio. Njihova uloga je da upotpunosti funkcioniraju izolirano, odnosno da prvo izvođenju procesa ne smiju utjecati jedni na druge. No sadašnja paradigma virutalnih strojeva se mijenja pojavom Docker-a koji uvodi novi pristup koji je bio već prije poznat (Linux - OpenVZ) takozvanog kontenjera (engl. containers). Docker koristi client-server arhitekturu gdje Docker client komunicira sa demoniziranim procesom Docker koji je zadužen za pokretanje i kontrolu nad kontenjerima. Njihova komunikacija ide preko REST-API-ja. Kontenjer se može opisati kao lagano i brzo pokretljivo virtualno računalo, pri čemu je svaki kontenjer zasebni proces na OS domaćina. Osnovni cilj je izolacija aplikacija na razini istog računala gdje aplikacije istovremeno rade sistemske pozive prema jezgri OS-a (engl. kernel). Na taj način se smanjuje broj instanci OS-a te je potrebno manje hardverskih resursa.

Docker slika

Kontenjer je kao i virtualno računalo slika (engl. image) datotečnog sustava. Kontenjeri se pokreću iz Docker image-a koji je različite strkture od iso datoteka koje služe za virtualne strojeve. Docker image datoteka se sastoji od moguće više slojeva koji pokreću kod unutar kontenjera te može naslijediti slojeve iz drugih slika. Popis ostalih slika moguće je pronaći na DockerHub-u.

FROM fedora

RUN dnf -y update && dnf clean all

RUN dnf -y install nginx && dnf clean all

RUN echo “daemon off;” » /etc/nginx/nginx.conf

RUN echo “nginx on Fedora” > /usr/share/nginx/html/index.html

EXPOSE 80

CMD [ “/usr/sbin/nginx” ]

Gore je prikazan Docker file nginx-a koji se pokreće na operacijskom sustavu Fedora. Ključnom riječi FROM navodimo roditeljski image file koji će biti skinuti sa DockerHub-a ili iz našeg lokalnog repozitorija. Svaka linija u Docker datoteci je novi sloj i preporuka je da kod kreiranja Docker datoteka njihov broj bude što manji radi performansa. Ključna riječ RUN označava da će se pokretati određene naredbe u komadnoj ljusci. EXPOSE otvara određeni port prema Docker klijentu te zadnja komanda pokreće nginx proces. Ukoliko se nginx proces ugasi, samim time taj kontenjer prestaje sa svojim izvođenjem. Pitanje je zašto on prestaje sa izvođenjem možemo odgovoriti vrlo jednostavno. Kontenjer je proces kao i svaki drugi kojem je zadano da izvršava neki proces. Kada se taj proces ugasi, OS automatski gasi i proces kontenjera. Razlika između kontenjera i ostalih procesa je da on ne vidi ostale podatke o svim ostalim procesima, a to je moguće zbog proširenja Linux kernela prije 15 godina. Također zahvaljujući Systemd-u i cgrupama moguće je dati pojedinom procesu određenu količinu memorije ili CPU, ali sa puno manje fleksibilnosti nego kod virtualnih računala. Proces kontenjer može skakti sa CPU-u na CPU-u dok virtualno računalo to ne može te u slučaju krive implementacije context switcha može doći do povrede izoliranosti.

Slojevi u slici

Kao što je prije navedeno, kontenjer se kreira iz Docker slike (engl. docker image). Kada se kreira novi kontenjer, dodaje se novi sloj za pisanje na vrh postojećih iz slike. Stoga svaka promjena datoteka za vrijeme kada je kontenjer aktivan, kao na primjer nova datoteka, promjena ili brisanje datoteka je zapisana u tom novom sloju. Stoga razlika između slike i kontenjera je zapisana u tom novom dodanom sloju. Kada se kontenjer ugasi, briše taj sloj, dok ostali slojevi iz slike ostaju ne promijenjeni. To nas dovodi do zaključka da više kontenjera može koristiti istu sliku bez straha od njezine promjene pošto svaki kontenjer dodaje svoj sloj za pisanje. Copy-on-write(CoW) je strategija u kojoj procesi koji traže iste podatke dijele istu istancu na njih. Ukoliko žele promijeniti instancu onda tek tada od OS-a dobivaju kopiju podataka. Docker koristi CoW tehniku kako bi brzo pokrenuo N kontenjera iz iste slike te smanjio memorijsko zauzeće. Stoga se promjene koje se rade u kontenjeru se zapisuju u mapi /var/lib/docker. Što dodatno olakšava forenzičku analizu jer se tamo vrlo jednostavno vide sve promjene koje su napravljene.

Podaci unutar kontenjera

Proces koji se pokreće unutar kontenjera koristi memoriju kao i ostali procesi koje pokreću izvan kontenjera. Proces unutar jednog kontenjera ne koristi ili ne dijeli istu memoriju kao procesi unutar nekog drugog kontenjera. To zapravo znaći da sva memorija koju koristi proces unutar jednog kontenjera je sva alocirana memorija kontenjera.

Kao prije navedeno, sve promjene sve zapisuju u novi sloj koji se dodaje na sliku, što znači da podaci nestaju kada se kontenjer ugasi. Sve promjene koje se zapisuju u novom sloju zahtjevaju poziv kernela i upravljačkog programa datotečnog sustava u pozadini te je zbog toga performansno sporije. Postoje načini na koji se podaci mogu zapisivati na datotečni sustav domačina. Jedan od njih je volume, koji su upravljani od strane Docker-a i on ne povečava veličinu kontenjera koji ga mount-a. Drugi se zove bind mounts. Oni imaju limitiranu funkcionalnost ukoliko ih usporedima sa volume-mima. Kada se radi pristup datotekama preko bind mounts-a onda se koristi njihova apsolutna putanja na domačinu (preslikavanje strukture datoteka). Prethodna dva načina se koriste kada se u kontenjere žele zapisivati perzistentni podaci te predstavljaju način dijeljenja podataka između kontenjera.

Zaključak

Docker kontenjeri mogu poslužiti kao dobar oponent virtualnim računalima u svijetu virtualizacije. Njihovo pokretanje je brže i oni ne zauzimaju toliko puno prostora. Jedna mana kontenjera je što oni dijele zajednički kernel sa računalom koji vrši virtualizaciju što onemogućuje virtualizaciju određenih operacijski sustava ili njihovih verzija. Sve promijene koje se naprave u kontenjeru, tj. u njegovom trenutnom sloju za pisanje se spremaju u dnevnik i to se ne briše čak i kada se kontenjer ugasi što može biti vrlo pogodno pri forenzičkoj analizi. Također podaci koje koriste računalni sustavi u kontenjeru su najčešće locirani izvan njega samoga pa je moguća forenzična analiza njegovog sadržaja bez pokretanja samog kontenjera. Sukladno svemu tome, kontenjeri su vrlo pogodni za računalnu forenziku zbog načina kako spremaju promijene datoteka u sebi.

Izvori

[1] Docker kontejnerska virtualizacija / Novosti / Računala / Naslovnica - VIDI Web Portal, https://www.vidi.hr/Racunala/Novosti/Docker-kontejnerska-virtualizacija

[2] Docker Introduction — What You Need To Know To Start Creating Containers, https://medium.com/@kelvin_sp/docker-introduction-what-you-need-to-know-to-start-creating-containers-8ffaf064930a

[3] DockerHub, https://hub.docker.com

[4] Docker documentation, https://docs.docker.com/v17.12/get-started/

racfor_wiki/virtualizacija/docker-kontejneri.txt · Zadnja izmjena: 2023/06/19 18:17 (vanjsko uređivanje)
Dieses Dokuwiki verwendet ein von Anymorphic Webdesign erstelltes Thema.
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0