{"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\/et\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Mis on Docker: l\u00fchike ajalooline \u00fclevaade ja p\u00f5hialused","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>10. augustil alustas Sloermis <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">videokursus Dockerist<\/a><\/noindex>, kus me k\u00e4sitleme seda p\u00f5hjalikult \u2014 alates p\u00f5hialustest kuni v\u00f5rguparameetriteni. <\/p>\n<p><\/p>\n<p>Selles artiklis r\u00e4\u00e4gime Docker'i ajalukku ja selle peamistest kontseptsioonidest: Image, Cli, Dockerfile. Loeng on suunatud algajatele, seega ei pruugi see huvi pakkuda kogenud kasutajatele. Siin ei ole verd, pimesoole ja s\u00fcgavat sukeldumist. K\u00f5ige alus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mis on Docker: l\u00fchike ajalooline \u00fclevaade ja p\u00f5hialused\" 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\">Mis on Docker<\/h2>\n<p><\/p>\n<p>Vaadake Docker'i m\u00e4\u00e4ratlust Vikipeediast.<\/p>\n<p><\/p>\n<blockquote><p>Docker on tarkvara, mis automatiseerib rakenduste juurutamist ja haldamist konteineritootmiseks toetavates keskkondades.<\/p><\/blockquote>\n<p>Sellest m\u00e4\u00e4ratlusest ei saa midagi aru. Eriti ei ole selge, mida t\u00e4hendab \"konteineritootmist toetavates keskkondades\". Et paremini aru saada, naaseme tagasi minevikku. Alustame ajastust, mida ma tinglikult nimetaksin \"Monoliitse ajastuks\".<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">Monoliitne aeg<\/h2>\n<p><\/p>\n<p>Monoliitne aeg on 2000. aastate algus, mil k\u00f5ik rakendused olid monoliidsed, koos hulga s\u00f5ltuvustega. Arendamine kestis kaua. Samuti ei olnud palju servereid, me tundsime neid k\u00f5iki nimedega ja j\u00e4lgisime neid. On selline naljakas v\u00f5rdlus:<\/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=\"Vaata videot\" 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>Lemmikud \u2014 need on koduloomad. Monoliitsetera ajal kohtlesime oma servereid nagu koduloomi, hoolitsedes ja hellitades neid, \u0441\u00f6ljem tolmu. Parema ressursihaldamise nimel kasutasime virtualiseerimist: v\u00f5tsime serveri ja l\u00f5ikasime mitmeks virtuaalseks masinaks, tagades sellega keskkonna isoleerituse.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">H\u00fcpperviisoril p\u00f5hinevad virtualiseerimiss\u00fcsteemid<\/h2>\n<p><\/p>\n<p>T\u00f5en\u00e4oliselt olete k\u00f5ik kuulnud virtualiseerimiss\u00fcsteemidest nagu VMware, VirtualBox, Hyper-V, Qemu KVM jne. Need tagavad rakenduste isoleerimise ja ressursihalduse, kuid neil on ka puudusi. Virtualiseerimiseks on vajalik h\u00fcpperviisor. H\u00fcpperviisor toob kaasa ressursitaseme \u00fclekoormuse. Ja tavaliselt on virtuaalne masin suur ja raske \u2014 sellel on operatsioonis\u00fcsteem, Nginx, Apache ja v\u00f5ib-olla ka MySQL. Pilt on suur, virtuaalse masinaga on ebamugav opereerida. Seet\u00f5ttu v\u00f5ib virtuaalmasinatega t\u00f6\u00f6tamine olla aeglane. Selle probleemi lahendamiseks loodi tuumatasandi virtualiseerimiss\u00fcsteemid.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Tuumatasandi virtualiseerimiss\u00fcsteemid<\/h2>\n<p><\/p>\n<p>Tuumatasandi virtualiseerimist toetavad s\u00fcsteemid nagu OpenVZ, Systemd-nspawn, LXC. T\u00fc\u00fcpiline n\u00e4ide sellisest virtualiseerimisest on LXC (Linux Containers). <\/p>\n<p><\/p>\n<p>LXC \u2014 operatsioonis\u00fcsteemi tasemel virtualiseerimis s\u00fcsteem, mis v\u00f5imaldab k\u00e4ivitada mitu eraldatud Linuxi operatsioonis\u00fcsteemi instantsi \u00fchel s\u00f5lmel. LXC ei kasutata virtuaalmasinaid, vaid loob virtuaalse keskkonna oma protsesside ruumiga ja v\u00f5rgu tarkvaraga.<\/p>\n<p><\/p>\n<p>Sisuliselt loob LXC konteinerid. Milline on erinevus virtuaalmasinate ja konteinerite vahel?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mis on Docker: l\u00fchike ajalooline \u00fclevaade ja p\u00f5hialused\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Konteiner ei sobi protsesside isoleerimiseks: tuuma taseme virtualiseerimiss\u00fcsteemides leitud haavatavused v\u00f5imaldavad p\u00e4\u00e4seda konteinerist v\u00e4lja hosti peale. Seet\u00f5ttu, kui soovite midagi isoleerida, on parem kasutada virtuaalmasinat.<\/p>\n<p><\/p>\n<p>Erinevusi virtualiseerimise ja konteineriseerimise vahel on v\u00f5imalik n\u00e4ha skeemilt.<br \/>\nEksisteerivad riistvaralised h\u00fcperviisorid, h\u00fcperviisorid operatsioonis\u00fcsteemi peal ja konteinerid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mis on Docker: l\u00fchike ajalooline \u00fclevaade ja p\u00f5hialused\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\"Riistvaralised\" h\u00fcperviisorid on suurep\u00e4rane valik, kui soovite midagi t\u00f5eliselt isoleerida. Sest seal on v\u00f5imalik isoleerida m\u00e4lu lehek\u00fclgede ja protsessorite tasemel.<\/p>\n<p><\/p>\n<p>On olemas h\u00fcperviisoreid programmidena ja konteinerid, millest me edaspidi r\u00e4\u00e4gime. Konteinerimise s\u00fcsteemides h\u00fcperviisorit ei ole, ent olemas on Container Engine, mis loob ja haldab konteinersid. See on kergem lahendus, mist\u00f5ttu on tuumaga t\u00f6\u00f6tamisega seotud overhead v\u00e4iksem v\u00f5i isegi puudub.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">Mis on kasutusel konteinerimise tasemel tuumas?<\/h2>\n<p>Peamised tehnoloogiad, mis v\u00f5imaldavad luua teistest protsessidest isoleeritud konteinerit, on Namespaces ja Control Groups.<\/p>\n<p>Namespaces: PID, Networking, Mount ja User. On veel, kuid lihtsuse huvides peatume nendel.<\/p>\n<p>PID Namespace piirab protsesse. Kui me n\u00e4iteks loome PID Namespacet ja paneme sinna protsessi, siis saab see PID 1. Tavalistes s\u00fcsteemides on PID 1 tavaliselt systemd v\u00f5i init. Seega, kui paneme protsessi uude namespace'i, saabki see PID 1.<\/p>\n<p>Networking Namespace v\u00f5imaldab piirata\/isoleerida v\u00f5rku ning sinna paigutada oma liidested. Mount \u2013 see on piirang failis\u00fcsteemis. User \u2013 piirangute seaded kasutajatele.<\/p>\n<p>Control Groups: Memory, CPU, IOPS, Network \u2013 kokku umbes 12 seadistust. Neid tuntakse ka kui Cgroups ('C-groups').<\/p>\n<p>Control Groups haldavad konteineri ressursse. Control Groups'i kaudu saame \u00f6elda, et konteiner ei tohiks tarbida rohkem kui teatud kogus ressursse.<\/p>\n<p>Konteinerimise t\u00f5husaks toimimiseks kasutatakse t\u00e4iendavaid tehnoloogiaid: Capabilities, Copy-on-write ja teised.<\/p>\n<p>Capabilities \u2014 see t\u00e4hendab, et me \u00fctleme protsessile, mida ta teha tohib ja mida mitte. S\u00fcsteemi tasemel on need lihtsalt bitikaardid, kus on palju parameetreid. N\u00e4iteks, kasutajal root on t\u00e4is\u00f5igused, ta v\u00f5ib teha k\u00f5ike. Aja server v\u00f5ib muuta s\u00fcsteemi kellaaega: tal on Time Capsule'i capabilities ja k\u00f5ik. Privileegide abil saab paindlikult seadistada protsesside piiranguid ja seel\u00e4bi end kaitsta.<\/p>\n<p>Copy-on-write s\u00fcsteem v\u00f5imaldab meil t\u00f6\u00f6tada Docker'i piltidega, kasutades neid efektiivsemalt.<\/p>\n<p><em>Praegu on Docker'il probleeme Cgroups v2 \u00fchilduvusega, seet\u00f5ttu k\u00e4sitletakse artiklis Cgroups v1.<\/em><\/p><\/blockquote>\n<p>Kuid naaseme ajalukku. <\/p>\n<p><\/p>\n<p>Kui tuumatasandi virtualiseerimiss\u00fcsteemid ilmusid, hakati neid aktiivselt rakendama. H\u00fcperevisori \u00fclekoormus kadus, kuid m\u00f5ned probleemid j\u00e4id alles:<\/p>\n<p><\/p>\n<ul>\n<li>suured pildid: sama OpenVZ-sse t\u00f5ukatakse operatsioonis\u00fcsteem, raamatukogud, palju erinevat tarkvara, ja l\u00f5puks on pilt ikkagi \u00fcsna suur;<\/li>\n<li>normaalset pakendamise ja tarne standardit ei ole, seet\u00f5ttu j\u00e4\u00e4b probleem s\u00f5ltuvustele. On olukordi, kus kaks koodi osa kasutavad \u00fchte ja sama raamatukogu, aga erinevate versioonidega. Nende vahel v\u00f5ivad tekkida konfliktid.<\/li>\n<\/ul>\n<p><\/p>\n<p>Nende probleemide lahendamiseks algas j\u00e4rgmine ajastu.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">Konteinerite ajastu<\/h2>\n<p><\/p>\n<p>Kui saabus konteinerite ajastu, muutus ka nende kasutamise filosoofia:<\/p>\n<p><\/p>\n<ul>\n<li>\u00dcks protsess \u2014 \u00fcks konteiner.<\/li>\n<li>Kohandame k\u00f5ik protsessile vajalikud s\u00f5ltuvused tema konteinerisse. See n\u00f5uab monoliitide jagamist mikroteenusteks.<\/li>\n<li>Mida v\u00e4iksem on pilt, seda parem \u2014 v\u00e4hem v\u00f5imalikke haavatavusi, kiiremini paigaldatav jne.<\/li>\n<li>Instantsid muutuvad efemeerseteks. <\/li>\n<\/ul>\n<p><\/p>\n<p>Kas sa m\u00e4letad, kuidas ma r\u00e4\u00e4kisin lemmikloomadest ja karjast? Varem olid instantsid sarnased lemmikloomadele, n\u00fc\u00fcd aga on nad nagu karja \u2014 veised. Varem oli monoliit \u2014 \u00fcks rakendus. N\u00fc\u00fcd on see 100 mikroteenust, 100 konteinerit. M\u00f5nel konteineril v\u00f5ib olla 2-3 koopiat. Me ei pea enam iga konteineri \u00fcle nii palju kontrollima. Meie jaoks on olulisem teenuse k\u00e4ttesaadavus: see, mida see konteinerite komplekt teeb. See muudab j\u00e4lgimise l\u00e4henemist.<\/p>\n<p><\/p>\n<p>Aastatel 2014-2015 toimus Docker'i t\u00f5us \u2014 tehnoloogia, millest me praegu r\u00e4\u00e4gime.<\/p>\n<p><\/p>\n<p>Docker muutis filosoofiat ja standardiseeris rakenduste pakendamise. Docker'i abil saame pakendada rakenduse, saata selle hoidlasse, alla laadida sealt ja juurutada. <\/p>\n<p><\/p>\n<p>Docker-konteinerisse paneme k\u00f5ik vajaliku, seega lahendab see s\u00f5ltuvuste probleemi. Docker tagab reprodutseeritavuse. Ma arvan, et paljud on kokku puutunud olukordadega, kus k\u00f5ik t\u00f6\u00f6tab, kuid kui l\u00fckkad selle tootmisse, enam ei t\u00f6\u00f6ta. Dockeriga kaob see probleem. Kui sinu Docker-konteiner k\u00e4ivitub ja teeb seda, mida peab tegema, siis on suure t\u00f5en\u00e4osusega, et see k\u00e4ivitub ka tootmises ja teeb seal sama.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">\u00dcks k\u00f5rvalep\u00f5ige ooverheadi teemal<\/h2>\n<p>Ooverheadi osas k\u00e4ivad pidevalt vaidlused. M\u00f5ned arvavad, et Docker ei too t\u00e4iendavat koormust, kuna kasutab Linuxi tuuma ja k\u00f5iki selle protsesse, mis on vajalikud konteinerimiseks. Nagu, \"kui sa \u00fctled, et Docker on ooverhead, siis on ka Linuxi tuum ooverhead.\"<\/p>\n<p>Teisest k\u00fcljest, kui s\u00fcveneda, siis on Dockeris t\u00f5epoolest m\u00f5ned asjad, mida v\u00f5iks pingutades nimetada ooverheadiks.<\/p>\n<p>Esimene on PID namespace. Kui paneme protsessi namespace'isse, antakse sellele PID 1. Samas on sellel protsessil ka teine PID, mis asub hosti namespace'is, konteineri v\u00e4ljaspool. N\u00e4iteks, kui k\u00e4ivitasime konteineris Nginxi, sai sellest PID 1 (master-protsess). Kuid hostis on selle PID 12623. Ja on keeruline \u00f6elda, kui suur see overhead on.<\/p>\n<p>Teine asi on Cgroups. Vaatame Cgroups'i m\u00e4lule, st v\u00f5imalust piirata konteineri m\u00e4lu. Kui see on sisse l\u00fclitatud, aktiveeritakse arvestid, memory accounting: kernel peab aru saama, kui palju lehti on eraldatud ja kui palju on veel saadaval selle konteineri jaoks. See v\u00f5ib olla overhead, kuid ma ei ole n\u00e4inud t\u00e4pset uurimist, kuidas see j\u00f5udlust m\u00f5jutab. Samuti ei ole ma m\u00e4rganud, et rakendus, mis on k\u00e4ivitatud Docker'is, kaotaks j\u00e4rsult j\u00f5udlust. <\/p>\n<p>Ja veel \u00fcks t\u00e4helepanek j\u00f5udluse kohta. Teatud s\u00fcdamiku parameetrid edastatakse hostist konteinerisse. Eelk\u00f5ige m\u00f5ned v\u00f5rguparameetrid. Seet\u00f5ttu, kui soovite Dockeris k\u00e4ivitada midagi k\u00f5rge j\u00f5udlusega, n\u00e4iteks midagi, mis kasutab aktiivselt v\u00f5rku, peate v\u00e4hemalt need parameetrid kohandama. N\u00e4iteks nf_conntrack. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">Docker kontseptsioonist<\/h2>\n<p><\/p>\n<p>Docker koosneb mitmest komponendist: <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2014 see on Container Engine; k\u00e4ivitab konteinerid. <\/li>\n<li>Docker CLI \u2014 Docker'i haldamise t\u00f6\u00f6riist.<\/li>\n<li>Dockerfile \u2014 juhis pildi koostamiseks.<\/li>\n<li>Image \u2014 pilt, millest konteiner k\u00e4ivitatakse.<\/li>\n<li>Container.<\/li>\n<li>Docker registry \u2014 piltide hoidla.<\/li>\n<\/ol>\n<p><\/p>\n<p>Skeemiliselt n\u00e4eb see v\u00e4lja umbes selline:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mis on Docker: l\u00fchike ajalooline \u00fclevaade ja p\u00f5hialused\" src=\"\/wp-content\/uploads\/2020\/08\/73ccc02c14485f72cfd7c64e3074f3b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Docker_hostis t\u00f6\u00f6tab Docker daemon, mis k\u00e4ivitab konteinerid. On Client, mis edastab k\u00e4ske: kogu pilt, laadi pilt alla, k\u00e4ivita konteiner. Docker daemon l\u00e4heb registrisse ja t\u00e4idab need. Docker klient v\u00f5ib p\u00f6\u00f6rduda nii kohalikult (Unix-soketi kaudu) kui ka TCP kaudu eemal asuvalt hostilt.<\/p>\n<p><\/p>\n<p>K\u00e4ime l\u00e4bi iga komponendi.<\/p>\n<p><\/p>\n<p><u>Docker daemon (daemon)<\/u> \u2014 see server pool, which operates on the host machine: downloads images and starts containers, creates a network between containers, and collects logs. When we say 'create an image', this task is also carried out by the daemon.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2014 the client side of Docker, a console utility for interacting with the daemon. Let me emphasize, it can work not only locally but also over a network. <\/p>\n<p><\/p>\n<p><strong>Basic commands:<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2014 display the containers that are currently running on the Docker host.<br \/>\ndocker images \u2014 display the images downloaded locally.<br \/>\ndocker search  \u2014 search for an image in the registry.<br \/>\ndocker pull  \u2014 download an image from the registry to the machine.<br \/>\ndocker build &lt;&gt; \u2014 build an image.<br \/>\ndocker run  \u2014 run a container.<br \/>\ndocker rm  \u2014 remove a container.<br \/>\ndocker logs  \u2014 logs of the container.<br \/>\ndocker start\/stop\/restart  \u2014 manage the container.\n<\/p>\n<p>If you master these commands and use them confidently, consider that you have mastered Docker at the user level by 70%.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2014 an instruction for creating an image. Almost every command in the instruction is a new layer. Let's look at an example.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Mis on Docker: l\u00fchike ajalooline \u00fclevaade ja p\u00f5hialused\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Umbes nii n\u00e4eb Dockerfile v\u00e4lja: vasakul on k\u00e4sud, paremal \u2014 argumendid. Iga k\u00e4sk, mis siin on (ja mida \u00fcldiselt Dockerfile'is kirjutatakse), loob uue kihi pildis. <\/p>\n<p><\/p>\n<p>Vaatamata vasaku k\u00fclje vaatamisele, saab ligikaudselt aru, mis toimub. Me \u00fctleme: \"loo me kaust\" \u2013 see on \u00fcks kiht. \"tee kaust aktiivseks\" \u2013 see on veel \u00fcks kiht, ja nii edasi. Kihtide kokkupanek lihtsustab elu. Kui ma loon veel \u00fche Dockerfile'i ja viimases reas midagi muutun \u2013 k\u00e4ivitan mitte \"python\" \"main.py\", vaid midagi muud, v\u00f5i installeerin s\u00f5ltuvusi teisest failist \u2013 siis eelnevaid kihte kasutatakse uuesti nagu vahem\u00e4lu.<\/p>\n<p><\/p>\n<p><u>Image<\/u> \u2014 see on konteineri pakendamine, piltidest k\u00e4ivitatakse konteinerid. Kui vaadata Dockerit nagu paketihaldurit (nagu t\u00f6\u00f6taksime deb v\u00f5i rpm pakettidega), siis image on sisuliselt rpm-pakett. YUM installimise kaudu saame rakenduse paigaldada, selle eemaldada, leida repos, alla laadida. Siin on umbes sama: piltidest k\u00e4ivitatakse konteinerid, need on salvestatud Docker registry's (sarnaselt YUM-ile, repos) ja igal pildil on SHA-256 hash, nimi ja silt.<\/p>\n<p><\/p>\n<p>Pilt luuakse Dockerfile'i juhendi j\u00e4rgi. Iga juhend Dockerfile'is loob uue kihi. Kihti saab taaskasutada.<\/p>\n<p><\/p>\n<p><u>Docker registry<\/u> on Docker'i piltide hoidla. Sarnaselt operatsioonis\u00fcsteemidele, on Docker'il avalik standardne registri \u2014 dockerhub. Kuid v\u00f5ite luua ka oma hoidla, oma Docker registry. <\/p>\n<p><\/p>\n<p><u>Konteiner<\/u> on see, mis k\u00e4ivitatakse pildist. Dockerfile'i juhendi j\u00e4rgi koostasime pildi, n\u00fc\u00fcd k\u00e4ivitame selle pildi p\u00f5hjal. See konteiner on isoleeritud teistest konteineritest ja peab sisaldama k\u00f5ike vajalikku rakenduse t\u00f6\u00f6tamiseks. Samas \u00fcks konteiner \u2014 \u00fcks protsess. Juhtub, et tuleb luua kaks protsessi, kuid see l\u00e4heb natuke vastuollu Docker'i ideoloogiaga.<\/p>\n<p><\/p>\n<p>N\u00f5ue \u00ab\u00fcks konteiner \u2014 \u00fcks protsess\u00bb on seotud PID nimelastega. Kui nimelaste sees k\u00e4ivitatakse protsess PID 1, siis kui see sureb, sureb ka kogu konteiner. Kui seal on k\u00e4ivitatud kaks protsessi: \u00fcks elab, teine on surnud, elab konteiner ikkagi edasi. Kuid see on parimate praktika k\u00fcsimus, millest r\u00e4\u00e4gime teistes materjalides.<\/p>\n<p><\/p>\n<p>Kursuse omaduste ja t\u00e4ieliku programmi l\u00e4hemalt uurimiseks v\u00f5ite kl\u00f5psata lingile: \u00ab<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Docker'i videokursus<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>Autor: Marsel Ibrajev, sertifitseeritud Kubernetes administraator, praktikainsener Southbridge'is, esineja ja Sl\u00f8rmi kursuste arendaja.<\/em><\/p>\n<p>Allikas: <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.0.1 - 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\/et\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Mis on Docker: l\u00fchike \u00fclevaade ajaloost ja peamistest abstraktsioonidest | ProHoster","description":"10. augustil algas Sl\u00f6rmis videokursus Dockerist, kus me k\u00e4sitleme seda t\u00e4ielikult \u2014 alates p\u00f5hiabstraktsioonidest kuni v\u00f5rguparameetriteni.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/91905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}