{"id":91905,"date":"2020-08-20T07:42:23","date_gmt":"2020-08-20T05:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii"},"modified":"2020-08-20T07:42:23","modified_gmt":"2020-08-20T05:42:23","slug":"chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Kaj je Docker: kratek pregled zgodovine in osnovne abstrakcije","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>10. avgusta je na Sljormu zapo\u010deo <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">video kurs o Dockeru<\/a><\/noindex>, u kojemu detaljno razra\u0111ujemo sve aspekte \u2014 od osnovnih apstrakcija do mre\u017enih parametara. <\/p>\n<p><\/p>\n<p>U ovom \u010dlanku razgovarat \u0107emo o istoriji nastanka Dockera i njegovim osnovnim apstrakcijama: Image, Cli, Dockerfile. Predavanje je namijenjeno po\u010detnicima, tako da vjerojatno ne\u0107e biti zanimljivo iskusnim korisnicima. Ne\u0107emo se baviti dubokim analizama. Samo osnovne informacije.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kaj je Docker: kratek pregled zgodovine in osnovne abstrakcije\" src=\"\/wp-content\/uploads\/2020\/08\/f01af417f24c838577b09bdf90f02fb9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"chto-takoe-docker\">\u0160ta je Docker<\/h2>\n<p><\/p>\n<p>Pogledajmo definiciju Dockera iz Wikipedije.<\/p>\n<p><\/p>\n<blockquote><p>Docker je softver za automatizaciju implementacije i upravljanje aplikacijama u okru\u017eenjima koja podr\u017eavaju kontejnerizaciju.<\/p><\/blockquote>\n<p>Iz ove definicije ni\u0161ta nije jasno. Pograni\u010dno je nejasno \u0161to zna\u010di \u201eu okru\u017eenjima koja podr\u017eavaju kontejnerizaciju\u201c. Da bismo to razjasnili, vratimo se u pro\u0161lost. Po\u010dnimo iz doba koje naziva \u201eMonolitna era\u201c.<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">Monolitna era<\/h2>\n<p><\/p>\n<p>Monolitna era je po\u010detak 2000-ih, kada su sve aplikacije bile monolitne, sa mno\u0161tvom zavisnosti. Razvoj je trajao dugo. U to vreme nije bilo mnogo servera, svi smo ih znali po imenu i pratili ih. Postoji zanimljiva usporedba:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"Od7e6hqis7A\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Od7e6hqis7A\/hqdefault.jpg\" alt=\"Predvajaj video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Ljubimci \u2014 to su ku\u0107ni prijatelji. U monolitnoj eri odnosili smo se prema svojim serverima kao prema ljubimcima, brinuli smo se i pazili na njih, sklanjaju\u0107i pra\u0161inu. Za bolje upravljanje resursima koristili smo virtualizaciju: uzeli smo server i podelili ga na nekoliko virtuelnih ma\u0161ina, \u010dime smo obezbedili izolaciju okru\u017eenja.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">Sistemi virtualizacije na bazi hipervizora<\/h2>\n<p><\/p>\n<p>O sistemima virtualizacije sigurno su svi \u010duli: VMware, VirtualBox, Hyper-V, Qemu KVM itd. Oni obezbe\u0111uju izolaciju aplikacija i upravljanje resursima, ali imaju i nedostatke. Da bi se realizovala virtualizacija, potreban je hipervizor. A hipervizor je dodatno optere\u0107enje resursa. \u010cak i sama virtuelna ma\u0161ina obi\u010dno je velika i te\u0161ka \u2014 obiman imid\u017e, na njemu je operativni sistem, Nginx, Apache, mogu\u0107e i MySQL. Imid\u017e je veliki, te\u0161ko je upravljati virtuelnom ma\u0161inom. Kao posledica, rad sa virtuelnim ma\u0161inama mo\u017ee biti spor. Da bismo re\u0161ili taj problem, stvorene su sisteme virtualizacije na nivou jezgra.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Sistemi virtualizacije na nivou jezgra<\/h2>\n<p><\/p>\n<p>Virtualizaciju na nivou jezgra podr\u017eavaju sistemi OpenVZ, Systemd-nspawn, LXC. Osvetljeni primer takve virtualizacije je LXC (Linux Containers). <\/p>\n<p><\/p>\n<p>LXC \u2014 sistem virtualizacije na nivoju operativnog sistema za pokretanje vi\u0161e izolovanih instanci operativnog sistema Linux na jednom \u010dvoru. LXC ne koristi virtuelne ma\u0161ine, ve\u0107 stvara virtuelno okru\u017eenje sa sopstvenim procesnim prostorom i mre\u017enim stekom.<\/p>\n<p><\/p>\n<p>U su\u0161tini, LXC stvara kontejnere. Koja je razlika izme\u0111u virtuelnih ma\u0161ina i kontejnera?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kaj je Docker: kratek pregled zgodovine in osnovne abstrakcije\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kontejner nije pogodan za izolaciju procesa: u sistemima virtualizacije na nivou jezgra postoje ranjivosti koje omogu\u0107avaju izlazak iz kontejnera na host. Stoga, ako vam je potrebna neka izolacija, bolje je koristiti virtuelnu ma\u0161inu.<\/p>\n<p><\/p>\n<p>Razlike izme\u0111u virtualizacije i kontejnerizacije mogu se videti na dijagramu.<br \/>\nPostoje hardverski hipervizori, hipervizori iznad OS i kontejneri. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kaj je Docker: kratek pregled zgodovine in osnovne abstrakcije\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u201eHardverski\u201c hipervizori su sjajna stvar ako zaista \u017eelite ne\u0161to da izolujete. Jer tu postoji mogu\u0107nost izolacije na nivou stranica memorije, procesora.<\/p>\n<p><\/p>\n<p>Postoje hipervizori kao program i postoje kontejneri, o kojima \u0107emo dalje govoriti. U sistemima kontejnerizacije ne postoji hipervizor, ali postoji Container Engine koji stvara kontejneri i upravlja njima. Ova stvar je lak\u0161a, pa zbog rada sa jezgrom overhead je manji ili ga uop\u0161te nema.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">\u0160ta se koristi za kontejnerizaciju na nivou jezgra<\/h2>\n<p>Osnovne tehnologije koje omogu\u0107avaju stvaranje izolovanog kontejnera od drugih procesa su Namespaces i Control Groups.<\/p>\n<p>Namespaces: PID, Networking, Mount i User. Ima jo\u0161, ali radi jednostavnosti razumevanja \u0107emo se zadr\u017eati na ovim.<\/p>\n<p>PID Namespace ograni\u010dava procese. Kada, na primer, stvaramo PID Namespace i sme\u0161tamo proces u njega, on postaje sa PID 1. Obi\u010dno je u sistemima PID 1 \u2014 to je systemd ili init. Tako da, kada sme\u0161tamo proces u novi namespace, on tako\u0111e dobija PID 1.<\/p>\n<p>Networking Namespace omogu\u0107ava ograni\u010davanje\/izolaciju mre\u017ee i unutar nje sme\u0161ta svoje interfejse. Mount \u2014 to je ograni\u010denje po datote\u010dnom sistemu. User \u2014 ograni\u010denje po korisnicima.<\/p>\n<p>Control Groups: Memory, CPU, IOPS, Network \u2014 ukupno oko 12 pode\u0161avanja. Ina\u010de ih jo\u0161 nazivaju Cgroups (\u201eC grupa\u201c).<\/p>\n<p>Control Groups upravljaju resursima za kontejner. Putem Control Groups mo\u017eemo re\u0107i da kontejner ne sme tro\u0161iti vi\u0161e od odre\u0111enog broja resursa.<\/p>\n<p>Da bi kontejnerizacija potpuno funkcionisala, koriste se dodatne tehnologije: Capabilities, Copy-on-write i druge.<\/p>\n<p>Capabilities su kada ka\u017eemo procesu \u0161ta mo\u017ee da radi, a \u0161ta ne mo\u017ee. Na nivou jezgra to su samo bitmape sa mno\u0161tvom parametara. Na primer, korisnik root ima pune privilegije i mo\u017ee raditi sve. Server vremena mo\u017ee menjati sistemsko vreme: ima capabilities za Time Capsule i to je to. Pomo\u0107u privilegija mo\u017eemo fleksibilno prilagoditi ograni\u010denja za procese i tako se za\u0161tititi.<\/p>\n<p>Sistem Copy-on-write omogu\u0107ava nam da radimo sa Docker slikama i koristimo ih efikasnije.<\/p>\n<p><em>Trenutno Docker ima problema sa kompatibilno\u0161\u0107u Cgroups v2, pa se u \u010dlanku razmatraju upravo Cgroups v1.<\/em><\/p><\/blockquote>\n<p>Ali, vratimo se istoriji. <\/p>\n<p><\/p>\n<p>Kada su se pojavili sistemi virtuelizacije na nivou jezgra, po\u010deli su se aktivno primenjivati. Overhead na hipervizoru je nestao, ali su neka pitanja ostala:<\/p>\n<p><\/p>\n<ul>\n<li>velike slike: u istoj OpenVZ se gura operativni sistem, biblioteke, gomila razli\u010ditog softvera, i na kraju slika i dalje bude prili\u010dno velika;<\/li>\n<li>nema normalnog standarda za pakovanje i isporuku, zbog \u010dega ostaje problem zavisnosti. Bivaju situacije kada dva komada koda koriste istu biblioteku, ali sa razli\u010ditim verzijama. Izme\u0111u njih mo\u017ee do\u0107i do sukoba.<\/li>\n<\/ul>\n<p><\/p>\n<p>Da bi se svi ovi problemi re\u0161ili, do\u0161la je slede\u0107a era.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">Era kontejnera<\/h2>\n<p><\/p>\n<p>Kada je nastupila Era kontejnera, promenila se filozofija rada sa njima:<\/p>\n<p><\/p>\n<ul>\n<li>Jedan proces - jedan kontejner.<\/li>\n<li>Sve potrebne zavisnosti za proces isporu\u010dujemo u njegov kontejner. To zahteva razbijanje monolitnih aplikacija na mikroslu\u017ebe.<\/li>\n<li>\u0160to je manja slika, to je bolje - manje mogu\u0107ih ranjivosti, br\u017ee se postavlja i tako dalje.<\/li>\n<li>Instanci postaju efemerne. <\/li>\n<\/ul>\n<p><\/p>\n<p>Setite se, rekao sam o ljubimcima i stoci? Pre je instanca bila poput ku\u0107nog ljubimca, a sada je postala kao stoka. Pre je postojala monolitna aplikacija - jedna aplikacija. Sada je to 100 mikroslu\u017ebi, 100 kontejnera. Neki od kontejnera mogu imati po 2-3 replikacije. Ne postaje nam toliko va\u017eno kontrolisati svaki kontejner. Va\u017enija nam je dostupnost same usluge: onoga \u0161to radi ovaj skup kontejnera. To menja pristupe u monitoringu.<\/p>\n<p><\/p>\n<p>Godine 2014-2015 do\u0161lo je do uspona Dockera - te tehnologije o kojoj \u0107emo sada govoriti.<\/p>\n<p><\/p>\n<p>Docker je spremenil filozofijo in standardiziral pakiranje aplikacij. S pomo\u010djo Dockera lahko zapakiramo aplikacijo, jo po\u0161ljemo v skladi\u0161\u010de, prenesemo od tam in jo razporedimo. <\/p>\n<p><\/p>\n<p>V Docker kontejner vgradimo vse potrebno, zato je te\u017eava s odvisnostmi re\u0161ljena. Docker zagotavlja ponovljivost. Mislim, da se je veliko ljudi sre\u010dalo z neponovljivostjo: vse deluje na tvojem stroju, ko pa to po\u0161lje\u0161 v produkcijo, ne deluje ve\u010d. S Dockerjem ta te\u017eava izginja. \u010ce se tvoj Docker kontejner za\u017eene in naredi tisto, kar mora, ga bo verjetno mogo\u010de zagnati tudi v produkciji in bo tam naredil isto.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">Odtok o overheadu<\/h2>\n<p>Glede overheada nenehno potekajo razprave. Nekateri menijo, da Docker ne prina\u0161a dodatne obremenitve, saj uporablja jedro Linuxa in vse njegove procese, potrebne za kontejnerizacijo. Pravi se, da '\u010de trdite, da je Docker overhead, potem je tudi jedro Linuxa overhead.'<\/p>\n<p>Po drugi strani, \u010de se poglobimo, v Dockerju res obstaja nekaj stvari, za katere lahko re\u010demo, da so overhead.<\/p>\n<p>Prvo je PID namespace. Ko v namespace vklju\u010dimo dolo\u010den proces, mu je dodeljen PID 1. Hkrati pa ima ta proces \u0161e en PID, ki se nahaja v gostiteljskem namespace, izven kontejnerja. Na primer, \u010de zagnamo Nginx v kontejnerju, je njegov PID 1 (master proces), medtem ko ima na gostitelju PID 12623. In te\u017eko je re\u010di, koliko je to overhead.<\/p>\n<p>Druga stvar so Cgroups. Vzamemo Cgroups za pomnilnik, torej mo\u017enost omejiti pomnilnik kontejnerju. Ko je to vklju\u010deno, se aktivirajo \u0161tevcem, pomnilni\u0161ko ra\u010dunanje: jedru je treba razumeti, koliko strani je dodeljenih in koliko je \u0161e prostih za ta kontejner. To bi lahko bil overhead, vendar natan\u010dnih raziskav o tem, kako to vpliva na zmogljivost, \u0161e nisem sre\u010dal. In sam nisem opazil, da bi aplikacija, zagnana v Dockerju, nenadoma drasti\u010dno izgubila na zmogljivosti. <\/p>\n<p>In \u0161e eno opombo o zmogljivosti. Nekatere nastavitve jedra se prena\u0161ajo iz gostitelja v kontejner. Zlasti nekateri omre\u017eni parametri. Zato, \u010de \u017eelite v Dockerju zagnati kaj visoko zmogljivega, na primer tisto, kar bo aktivno uporabljalo omre\u017eje, boste morali te parametre vsaj malo prilagoditi. Na primer, nf_conntrack. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">O konceptu Dockera<\/h2>\n<p><\/p>\n<p>Docker je sestavljen iz ve\u010d komponent: <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2014 to je container engine; za\u017eene kontejnerje. <\/li>\n<li>Docker CII \u2014 orodje za upravljanje z Dockerjem.<\/li>\n<li>Dockerfile \u2014 navodilo, kako zgraditi sliko.<\/li>\n<li>Image \u2014 slika, iz katere se ustvari kontejner.<\/li>\n<li>Kontejner.<\/li>\n<li>Docker registry \u2014 skladi\u0161\u010de slik.<\/li>\n<\/ol>\n<p><\/p>\n<p>Shematsko to izgleda pribli\u017eno tako:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kaj je Docker: kratek pregled zgodovine in osnovne abstrakcije\" src=\"\/wp-content\/uploads\/2020\/08\/73ccc02c14485f72cfd7c64e3074f3b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na Docker_hostu deluje Docker daemon, ki za\u017eene kontejnerje. Obstaja klient, ki prena\u0161a ukaze: zgradi sliko, prenesi sliko, za\u017eeni kontejner. Docker daemon dostopa do registryja in jih izvr\u0161i. Docker klient lahko dostopa tako lokalno (do unix-soka) kot tudi prek TCP z oddaljenega gostitelja.<\/p>\n<p><\/p>\n<p>Poglejmo vsak komponent.<\/p>\n<p><\/p>\n<p><u>Docker daemon (demon)<\/u> \u2014 je stre\u017eni\u0161ki del, deluje na gostiteljskem stroju: prena\u0161a slike in iz njih za\u017eene kontejnerje, ustvarja omre\u017eje med kontejnerji, zbira dnevnike. Ko re\u010demo \"ustvari sliko\", se s tem prav tako ukvarja demon.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2014 je klientni del Dockerja, konzolno orodje za delo z demonom. Ponavljam, deluje lahko ne samo lokalno, ampak tudi prek omre\u017eja. <\/p>\n<p><\/p>\n<p><strong>Osnovni ukazi:<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2014 prika\u017ee kontejnerje, ki so trenutno zagnani na Docker gostitelju.<br \/>\ndocker images \u2014 prika\u017ee slike, prenesene lokalno.<br \/>\ndocker search  \u2014 iskanje slike v registryju.<br \/>\ndocker pull  \u2014 prenesi sliko iz registryja na napravo.<br \/>\ndocker build &lt;&gt; \u2014 zgradi sliko.<br \/>\ndocker run  \u2014 zagon kontejnerja.<br \/>\ndocker rm  \u2014 odstrani kontejner.<br \/>\ndocker logs  \u2014 dnevniki kontejnerja<br \/>\ndocker start\/stop\/restart  \u2014 delo s kontejnerjem\n<\/p>\n<p>\u010ce osvojite te ukaze in jih boste znali samozavestno uporabljati, potem lahko \u0161tejete, da ste 70 % osvojili Docker na ravni uporabnika.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2014 navodila za ustvarjanje slike. Skoraj vsak ukaz v navodilu je nova plast. Poglejmo na primeru.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Kaj je Docker: kratek pregled zgodovine in osnovne abstrakcije\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pribli\u017eno tako izgleda Dockerfile: levo so ukazi, desno \u2014 argumenti. Vsak ukaz, ki je tukaj (in sploh pi\u0161e v Dockerfile), ustvari novo plast v sliki. <\/p>\n<p><\/p>\n<p>\u0414\u0430\u0436\u0435 \u0433\u043b\u044f\u0434\u044f \u043d\u0430 \u043b\u0435\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c: \u00ab\u0441\u043e\u0437\u0434\u0430\u0439 \u043d\u0430\u043c \u043f\u0430\u043f\u043a\u0443\u00bb \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0441\u043b\u043e\u0439. \u00ab\u0421\u0434\u0435\u043b\u0430\u0439 \u043f\u0430\u043f\u043a\u0443 \u0440\u0430\u0431\u043e\u0447\u0435\u0439\u00bb \u2014 \u044d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043b\u043e\u0439, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0421\u043b\u043e\u0451\u043d\u044b\u0439 \u043f\u0438\u0440\u043e\u0433 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0436\u0438\u0437\u043d\u044c. \u0415\u0441\u043b\u0438 \u044f \u0441\u043e\u0437\u0434\u0430\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d Dockerfile \u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u044e \u2014 \u0437\u0430\u043f\u0443\u0449\u0443 \u043d\u0435 &quot;python&quot; &quot;main.py&quot;, \u0430 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0440\u0443\u0433\u043e\u0435, \u0438\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u2014 \u0442\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u043b\u043e\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b, \u043a\u0430\u043a \u043a\u0435\u0448.<\/p>\n<p><\/p>\n<p><u>Slika<\/u> \u2014 to je kontejner paketa, iz kojeg se pokre\u0107u kontejneri. Ako gledamo na Docker kao na upravitelja paketa (kao da radimo s deb ili rpm paketima), tada je slika u su\u0161tini rpm paket. Preko yum install mo\u017eemo instalirati aplikaciju, ukloniti je, prona\u0107i u repozitoriju, preuzeti. Ovdje je otprilike isto: kontejneri se pokre\u0107u iz slike, pohranjeni su u Docker registry (analogno yum-u, u repozitoriju), a svaka slika ima SHA-256 hash, ime i oznaku.<\/p>\n<p><\/p>\n<p>Slika se sastavlja prema uputama iz Dockerfile-a. Svaka uputa iz Dockerfile-a stvara novu razinu. Razine se mogu ponovno koristiti.<\/p>\n<p><\/p>\n<p><u>Docker registry<\/u> \u2014 to je repozitorij Docker slika. Analogno operativnim sustavima, Docker ima javno dostupan standardni registar \u2014 dockerhub. No, mogu\u0107e je izgraditi vlastiti repozitorij, svoj Docker registry. <\/p>\n<p><\/p>\n<p><u>Kontejner<\/u> \u2014 to je ono \u0161to se pokre\u0107e iz slike. Prema uputama iz Dockerfile-a, sastavili smo sliku, a zatim pokre\u0107emo kontejner iz te slike. Ovaj kontejner je izoliran od ostalih kontejnera, i trebao bi sadr\u017eavati sve potrebno za rad aplikacije. Prilikom toga, jedan kontejner \u2014 jedan proces. Ponekad se mora izvoditi dva procesa, ali to je malo u suprotnosti s ideologijom Dockera.<\/p>\n<p><\/p>\n<p>Zahtjev \"jedan kontejner \u2014 jedan proces\" povezan je s PID Namespace. Kada se unutar Namespace-a pokrene proces s PID 1, ako on iznenada umre, tada cijeli kontejner tako\u0111er umire. Ako su tu pokrenuta dva procesa: jedan \u017eivi, a drugi je umro, kontejner \u0107e i dalje \u017eivjeti. No, ovo se ti\u010de najbolje prakse, o kojima \u0107emo razgovarati u drugim materijalima.<\/p>\n<p><\/p>\n<p>Vi\u0161e detalja o specifi\u010dnostima i cjelovitom programu te\u010daja mo\u017eete prona\u0107i na linku: \"<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Video te\u010daj o Dockerju<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>Autor: Marcel Ibraev, certificirani Kubernetes administrator, prakti\u010dni in\u017eenjer u tvrtki Southbridge, govornik i autor kurseva Schlerm.<\/em><\/p>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/515508\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f Docker \u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u0445: Image, Cli, Dockerfile. \u041b\u0435\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u043e\u0432\u0438, \u0430\u043f\u043f\u0435\u043d\u0434\u0438\u043a\u0441\u0430 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91906,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47\u0160to je Docker: kratak pregled povijesti i osnovnih apstrakcija | ProHoster","description":"10. kolovoza u Schlerm-u zapo\u010deo je video te\u010daj o Docker-u, u kojem ga potpuno razra\u0111ujemo \u2014 od osnovnih apstrakcija do mre\u017enih parametara.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster","og:description":"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-20T05:42:23+00:00","article:modified_time":"2020-08-20T05:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91905","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:18:28","updated":"2022-10-01 05:09:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/91905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}