{"id":36772,"date":"2019-10-31T22:13:44","date_gmt":"2019-10-31T19:13:44","guid":{"rendered":"https:\/\/prohoster.info\/blog\/ponimaya-docker\/"},"modified":"2019-10-31T22:13:44","modified_gmt":"2019-10-31T19:13:44","slug":"ponimaya-docker","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/ponimaya-docker","title":{"rendered":"Ch\u00e1p\u00e1n\u00ed Dockeru","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>U\u017e n\u011bkolik m\u011bs\u00edc\u016f pou\u017e\u00edv\u00e1m Docker k strukturov\u00e1n\u00ed procesu v\u00fdvoje\/dod\u00e1n\u00ed webov\u00fdch projekt\u016f. Nab\u00edz\u00edm \u010dten\u00e1\u0159\u016fm \u201eHabrHabr\u201c p\u0159eklad \u00favodn\u00edho \u010dl\u00e1nku o Dockeru \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/introduction\/understanding-docker\/\">\u201ePochopen\u00ed Dockeru\u201c<\/a><\/noindex>.<\/i><\/p>\n<h3>Co je Docker?<\/h3>\n<p>\nDocker je otev\u0159en\u00e1 platforma pro v\u00fdvoj, dod\u00e1n\u00ed a provoz aplikac\u00ed. Docker je navr\u017een pro rychlej\u0161\u00ed nasazen\u00ed va\u0161ich aplikac\u00ed. S pomoc\u00ed Dockeru m\u016f\u017eete odd\u011blit va\u0161i aplikaci od va\u0161\u00ed infrastruktury a zach\u00e1zet se strukturou jako s \u0159\u00edzenou aplikac\u00ed. Docker pom\u00e1h\u00e1 rychleji nasazovat v\u00e1\u0161 k\u00f3d, rychleji testovat, rychleji vyd\u00e1vat aplikace a zkracovat \u010das mezi psan\u00edm k\u00f3du a jeho spu\u0161t\u011bn\u00edm. Docker to d\u011bl\u00e1 pomoc\u00ed lehk\u00e9 platformy kontejnerov\u00e9 virtualizace, vyu\u017e\u00edvaj\u00edc\u00ed procesy a n\u00e1stroje, kter\u00e9 pom\u00e1haj\u00ed spravovat a nasazovat va\u0161e aplikace.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nV j\u00e1dru Docker umo\u017e\u0148uje spou\u0161t\u011bt prakticky jakoukoli aplikaci, bezpe\u010dn\u011b izolovanou v kontejneru. Bezpe\u010dn\u00e1 izolace v\u00e1m umo\u017e\u0148uje spou\u0161t\u011bt na jednom hostiteli v\u00edce kontejner\u016f sou\u010dasn\u011b. Lehk\u00e1 povaha kontejneru, kter\u00fd je spu\u0161t\u011bn bez dodate\u010dn\u00e9 z\u00e1t\u011b\u017ee hypervizora, v\u00e1m umo\u017e\u0148uje dos\u00e1hnout v\u00edce z va\u0161eho hardwaru.<\/p>\n<p>Platforma a n\u00e1stroje kontejnerov\u00e9 virtualizace mohou b\u00fdt u\u017eite\u010dn\u00e9 v n\u00e1sleduj\u00edc\u00edch p\u0159\u00edpadech:<\/p>\n<ul>\n<li>balen\u00ed va\u0161\u00ed aplikace (a tak\u00e9 pou\u017e\u00edvan\u00fdch komponent) do Docker kontejner\u016f;<\/li>\n<li>distribuce a dod\u00e1n\u00ed t\u011bchto kontejner\u016f va\u0161im t\u00fdm\u016fm pro v\u00fdvoj a testov\u00e1n\u00ed;<\/li>\n<li>nasazen\u00ed t\u011bchto kontejner\u016f do va\u0161ich produkc\u00ed, jak do datov\u00fdch center, tak do cloudu.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Na co mohu pou\u017e\u00edt Docker?<\/h3>\n<p><\/p>\n<h4>Rychl\u00e9 nasazen\u00ed va\u0161ich aplikac\u00ed<\/h4>\n<p>\nDocker je skv\u011bl\u00fd pro organizaci v\u00fdvojov\u00e9ho cyklu. Docker umo\u017e\u0148uje v\u00fdvoj\u00e1\u0159\u016fm pou\u017e\u00edvat lok\u00e1ln\u00ed kontejnery s aplikacemi a slu\u017ebami. To n\u00e1sledn\u011b umo\u017e\u0148uje integraci do procesu kontinu\u00e1ln\u00ed integrace a nasazen\u00ed (continuous integration and deployment workflow).<\/p>\n<p>Nap\u0159\u00edklad va\u0161i v\u00fdvoj\u00e1\u0159i p\u00ed\u0161\u00ed k\u00f3d lok\u00e1ln\u011b a sd\u00edl\u00ed sv\u016fj v\u00fdvojov\u00fd stack (sadu Docker obraz\u016f) se sv\u00fdmi kolegy. Kdy\u017e jsou p\u0159ipraveni, ode\u0161lou k\u00f3d a kontejnery na testovac\u00ed prost\u0159ed\u00ed a spust\u00ed jak\u00e9koli pot\u0159ebn\u00e9 testy. Z testovac\u00edho prost\u0159ed\u00ed mohou odeslat k\u00f3d a obrazy do produkce.<\/p>\n<h4>Jednodu\u0161\u0161\u00ed nasazen\u00ed a rozbalen\u00ed<\/h4>\n<p>\nPlatforma zalo\u017een\u00e1 na kontejnerech Docker umo\u017e\u0148uje snadno p\u0159en\u00e1\u0161et va\u0161e pracovn\u00ed zat\u00ed\u017een\u00ed. Kontejnery Docker mohou b\u011b\u017eet na va\u0161\u00ed lok\u00e1ln\u00ed stanici, jak na fyzick\u00e9, tak na virtu\u00e1ln\u00ed ma\u0161in\u011b v datacentru nebo v cloudu.<\/p>\n<p>P\u0159enositelnost a lehk\u00e1 povaha Dockeru usnad\u0148uj\u00ed dynamickou spr\u00e1vu va\u0161eho zat\u00ed\u017een\u00ed. M\u016f\u017eete pou\u017e\u00edt Docker k nasazen\u00ed nebo uha\u0161en\u00ed va\u0161\u00ed aplikace nebo slu\u017eeb. Rychlost Dockeru umo\u017e\u0148uje prov\u00e1d\u011bt tyto operace t\u00e9m\u011b\u0159 v re\u00e1ln\u00e9m \u010dase.<\/p>\n<h4>Vysok\u00e9 z\u00e1t\u011b\u017ee a v\u00edce pracovn\u00edch zat\u00ed\u017een\u00ed<\/h4>\n<p>\nDocker je lehk\u00fd a rychl\u00fd. Nab\u00edz\u00ed spolehlivou, n\u00e1kladov\u011b efektivn\u00ed alternativu k virtu\u00e1ln\u00edm stroj\u016fm zalo\u017een\u00fdm na hypervizoru. Je obzvl\u00e1\u0161\u0165 u\u017eite\u010dn\u00fd v prost\u0159ed\u00ed s vysok\u00fdm zat\u00ed\u017een\u00edm, nap\u0159\u00edklad p\u0159i vytv\u00e1\u0159en\u00ed vlastn\u00edho cloudu nebo platformy jako slu\u017eby (platform-as-service). Je tak\u00e9 u\u017eite\u010dn\u00fd pro mal\u00e9 a st\u0159edn\u00ed aplikace, kdy\u017e chcete maxim\u00e1ln\u011b vyu\u017e\u00edt dostupn\u00e9 zdroje.<\/p>\n<h3>Hlavn\u00ed komponenty Dockeru<\/h3>\n<p>\nDocker se skl\u00e1d\u00e1 ze dvou hlavn\u00edch komponent:<\/p>\n<ul>\n<li>Docker: platforma pro virtualizaci s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem;<\/li>\n<li>Docker Hub: na\u0161e platforma jako slu\u017eba pro distribuci a spr\u00e1vu kontejner\u016f Docker.<\/li>\n<\/ul>\n<p>\n<i>Pozn\u00e1mka! Docker se distribuuje pod licenc\u00ed Apache 2.0.<\/i><\/p>\n<h3>Architektura Dockeru<\/h3>\n<p><\/p>\n<p>Docker pou\u017e\u00edv\u00e1 architekturu klient-server. Klient Docker komunikuje s d\u00e9monem Docker, kter\u00fd p\u0159eb\u00edr\u00e1 z\u00e1t\u011b\u017e vytv\u00e1\u0159en\u00ed, spou\u0161t\u011bn\u00ed a distribuce va\u0161ich kontejner\u016f. Oba, klient i server, mohou b\u011b\u017eet na jednom syst\u00e9mu, m\u016f\u017eete p\u0159ipojit klienta k vzd\u00e1len\u00e9mu d\u00e9monu Docker. Klient a server komunikuj\u00ed p\u0159es socket nebo p\u0159es RESTful API.<\/p>\n<p><img decoding=\"async\" alt=\"Ch\u00e1p\u00e1n\u00ed Dockeru\" src=\"\/wp-content\/uploads\/2019\/08\/eb67e625e776737163e49a41829ed102.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>D\u00e9mon Docker<\/h4>\n<p>\nJak je zn\u00e1zorn\u011bno na diagramu, d\u00e9mon b\u011b\u017e\u00ed na hostitelsk\u00e9 stanici. U\u017eivatel neinteraguje p\u0159\u00edmo se serverem, ale pou\u017e\u00edv\u00e1 k tomu klienta.<\/p>\n<h4>Klient Docker<\/h4>\n<p>\nKlient Docker, program Docker, je hlavn\u00edm rozhran\u00edm k Dockeru. Z\u00edsk\u00e1v\u00e1 p\u0159\u00edkazy od u\u017eivatele a interaguje s d\u00e9monem Docker.<\/p>\n<h4>Uvnit\u0159 Dockeru<\/h4>\n<p>\nAbychom pochopili, z \u010deho se Docker skl\u00e1d\u00e1, mus\u00edme v\u011bd\u011bt o t\u0159ech komponentech:<\/p>\n<ul>\n<li>obrazy (images)<\/li>\n<li>registr (registries)<\/li>\n<li>kontejnery<\/li>\n<\/ul>\n<h4>Obr\u00e1zky<\/h4>\n<p>\nDocker obraz je \u0161ablona pouze pro \u010dten\u00ed. Nap\u0159\u00edklad m\u016f\u017ee obsahovat opera\u010dn\u00ed syst\u00e9m Ubuntu s Apache a na n\u011bm b\u011b\u017e\u00edc\u00ed aplikaci. Obrazy se pou\u017e\u00edvaj\u00ed k vytv\u00e1\u0159en\u00ed kontejner\u016f. Docker umo\u017e\u0148uje snadno vytv\u00e1\u0159et nov\u00e9 obrazy, aktualizovat existuj\u00edc\u00ed, nebo m\u016f\u017eete stahovat obrazy vytvo\u0159en\u00e9 jin\u00fdmi u\u017eivateli. Obrazy jsou sou\u010d\u00e1st\u00ed sestaven\u00ed dockeru.<\/p>\n<h4>Registr<\/h4>\n<p>\nDocker registr ukl\u00e1d\u00e1 obrazy. Existuj\u00ed ve\u0159ejn\u00e9 a soukrom\u00e9 registry, ze kter\u00fdch lze stahovat nebo nahr\u00e1vat obrazy. Ve\u0159ejn\u00fd Docker registr je <noindex><a rel=\"nofollow\" href=\"http:\/\/hub.docker.com\/\">Docker Hub<\/a><\/noindex>. Obsahuje obrovskou sb\u00edrku obraz\u016f. Jak v\u00edte, obrazy mohou b\u00fdt vytvo\u0159eny v\u00e1mi nebo m\u016f\u017eete pou\u017e\u00edvat obrazy vytvo\u0159en\u00e9 n\u011bk\u00fdm jin\u00fdm. Registry jsou sou\u010d\u00e1st\u00ed distribuce.<\/p>\n<h4>Kontejnery<\/h4>\n<p>\nKontejnery jsou podobn\u00e9 adres\u00e1\u0159\u016fm. V kontejnerech je obsa\u017eeno v\u0161e, co je pot\u0159eba pro b\u011bh aplikace. Ka\u017ed\u00fd kontejner se vytv\u00e1\u0159\u00ed z obrazu. Kontejnery mohou b\u00fdt vytv\u00e1\u0159eny, spou\u0161t\u011bny, zastavov\u00e1ny, p\u0159esouv\u00e1ny nebo odstra\u0148ov\u00e1ny. Ka\u017ed\u00fd kontejner je izolovan\u00fd a p\u0159edstavuje bezpe\u010dnou platformu pro aplikaci. Kontejnery jsou sou\u010d\u00e1st\u00ed provozu.<\/p>\n<h4>Jak tedy Docker funguje?<\/h4>\n<p>\nZat\u00edm v\u00edme, \u017ee:<\/p>\n<ul>\n<li>m\u016f\u017eeme vytv\u00e1\u0159et obrazy, kter\u00e9 obsahuj\u00ed na\u0161e aplikace;<\/li>\n<li>m\u016f\u017eeme vytv\u00e1\u0159et kontejnery z obraz\u016f pro spu\u0161t\u011bn\u00ed aplikac\u00ed;<\/li>\n<li>m\u016f\u017eeme distribuovat obrazy p\u0159es Docker Hub nebo jin\u00fd registr obraz\u016f.<\/li>\n<\/ul>\n<p>\nPod\u00edvejme se, jak tyto komponenty spolu souvisej\u00ed.<\/p>\n<h4>Jak funguje obraz?<\/h4>\n<p>\nU\u017e v\u00edme, \u017ee obraz je \u0161ablona pouze pro \u010dten\u00ed, ze kter\u00e9 se vytv\u00e1\u0159\u00ed kontejner. Ka\u017ed\u00fd obraz se skl\u00e1d\u00e1 z mno\u017einy vrstev. Docker pou\u017e\u00edv\u00e1 <noindex><a rel=\"nofollow\" href=\"http:\/\/en.wikipedia.org\/wiki\/UnionFS\">unified file system<\/a><\/noindex> k propojen\u00ed t\u011bchto vrstev do jednoho obrazu. Unified file system umo\u017e\u0148uje soubor\u016fm a adres\u00e1\u0159\u016fm z r\u016fzn\u00fdch souborov\u00fdch syst\u00e9m\u016f (r\u016fzn\u00fdch v\u011btv\u00ed) se transparentn\u011b p\u0159ekr\u00fdvat, co\u017e vytv\u00e1\u0159\u00ed koherentn\u00ed souborov\u00fd syst\u00e9m.<\/p>\n<p>Jedn\u00edm z d\u016fvod\u016f, pro\u010d je docker lehk\u00fd, je pou\u017eit\u00ed takov\u00fdch vrstev. Kdy\u017e zm\u011bn\u00edte obraz, nap\u0159\u00edklad aktualizac\u00ed aplikace, vytv\u00e1\u0159\u00ed se nov\u00e1 vrstva. T\u00edmto zp\u016fsobem, bez nutnosti nahrazovat cel\u00fd obraz nebo jej rekonstruovat, jak byste mo\u017en\u00e1 museli ud\u011blat s virtu\u00e1ln\u00ed stroj, je pouze p\u0159id\u00e1na nebo aktualizov\u00e1na vrstva. A nemus\u00edte distribuovat cel\u00fd nov\u00fd obraz, pouze aktualizace, co\u017e usnad\u0148uje a urychluje distribuci obraz\u016f.<\/p>\n<p>Ka\u017ed\u00fd obraz se zakl\u00e1d\u00e1 na z\u00e1kladn\u00edm obrazu. Nap\u0159\u00edklad ubuntu, z\u00e1kladn\u00ed obraz Ubuntu, nebo fedora, z\u00e1kladn\u00ed obraz distribuce Fedora. M\u016f\u017eete tak\u00e9 pou\u017e\u00edt obrazy jako z\u00e1klad pro vytv\u00e1\u0159en\u00ed nov\u00fdch obraz\u016f. Nap\u0159\u00edklad pokud m\u00e1te obraz apache, m\u016f\u017eete ho pou\u017e\u00edt jako z\u00e1kladn\u00ed obraz pro va\u0161e webov\u00e9 aplikace.<\/p>\n<p><i>Pozn\u00e1mka! Docker obvykle bere obrazy z registru Docker Hub.<\/i><\/p>\n<p>Docker obrazy mohou b\u00fdt vytvo\u0159eny z t\u011bchto z\u00e1kladn\u00edch obraz\u016f, kroky popisuj\u00edc\u00ed vytv\u00e1\u0159en\u00ed t\u011bchto obraz\u016f naz\u00fdv\u00e1me instrukcemi. Ka\u017ed\u00e1 instrukce vytv\u00e1\u0159\u00ed nov\u00fd obraz nebo \u00farove\u0148. Instrukcemi budou n\u00e1sleduj\u00edc\u00ed akce:<\/p>\n<p><\/p>\n<ul>\n<li>spu\u0161t\u011bn\u00ed p\u0159\u00edkazu<\/li>\n<li>p\u0159id\u00e1n\u00ed souboru nebo adres\u00e1\u0159e<\/li>\n<li>vytvo\u0159en\u00ed prom\u011bnn\u00e9 prost\u0159ed\u00ed<\/li>\n<li>ur\u010den\u00ed, co se m\u00e1 spustit p\u0159i spu\u0161t\u011bn\u00ed kontejneru tohoto obrazu<\/li>\n<\/ul>\n<p>Tyto instrukce jsou ulo\u017eeny v souboru <code>Dockerfile<\/code>. Docker to \u010dte <code>Dockerfile<\/code>, kdy\u017e sestavujete obraz, prov\u00e1d\u00ed tyto instrukce a vrac\u00ed kone\u010dn\u00fd obraz.<\/p>\n<h4>Jak funguje docker registr?<\/h4>\n<p>\nRegistr je \u00falo\u017ei\u0161t\u011b docker obraz\u016f. Po vytvo\u0159en\u00ed obrazu ho m\u016f\u017eete publikovat na ve\u0159ejn\u00e9m registru Docker Hub nebo na va\u0161em osobn\u00edm registru.<\/p>\n<p>Pomoc\u00ed docker klienta m\u016f\u017eete vyhled\u00e1vat ji\u017e publikovan\u00e9 obrazy a stahovat je na va\u0161i ma\u0161inu s dockerem pro vytv\u00e1\u0159en\u00ed kontejner\u016f.<\/p>\n<p>Docker Hub poskytuje ve\u0159ejn\u00e1 a soukrom\u00e1 \u00falo\u017ei\u0161t\u011b obraz\u016f. Vyhled\u00e1v\u00e1n\u00ed a stahov\u00e1n\u00ed obraz\u016f z ve\u0159ejn\u00fdch \u00falo\u017ei\u0161\u0165 je dostupn\u00e9 pro v\u0161echny. Obsah soukrom\u00fdch \u00falo\u017ei\u0161\u0165 se nedost\u00e1v\u00e1 do v\u00fdsledk\u016f vyhled\u00e1v\u00e1n\u00ed. Pouze vy a va\u0161i u\u017eivatel\u00e9 mohou tyto obrazy z\u00edsk\u00e1vat a vytv\u00e1\u0159et z nich kontejnery.<\/p>\n<h4>Jak funguje kontejner?<\/h4>\n<p>\nKontejner se skl\u00e1d\u00e1 z opera\u010dn\u00edho syst\u00e9mu, u\u017eivatelsk\u00fdch soubor\u016f a metadat. Jak v\u00edme, ka\u017ed\u00fd kontejner je vytvo\u0159en z obrazu. Tento obraz \u0159\u00edk\u00e1 dockeru, co se nach\u00e1z\u00ed v kontejneru, jak\u00fd proces spustit, kdy\u017e se kontejner spust\u00ed a dal\u0161\u00ed konfigura\u010dn\u00ed \u00fadaje. Docker obraz je dostupn\u00fd pouze pro \u010dten\u00ed. Kdy\u017e docker spust\u00ed kontejner, vytv\u00e1\u0159\u00ed vrstvu pro \u010dten\u00ed\/z\u00e1pis nad obrazem (pou\u017e\u00edvaj\u00edc\u00ed union file system, jak bylo uvedeno d\u0159\u00edve), ve kter\u00e9 m\u016f\u017ee b\u00fdt spu\u0161t\u011bna aplikace.<\/p>\n<h4>Co se stane, kdy\u017e se kontejner spust\u00ed?<\/h4>\n<p>\nBu\u010f pomoc\u00ed programu <code>docker<\/code>, nebo pomoc\u00ed RESTful API, docker klient \u0159\u00edk\u00e1 docker d\u00e9monu, aby spustil kontejner.<\/p>\n<p><code>$ sudo docker run -i -t ubuntu \/bin\/bash<br \/>\n<\/code><br \/>\nPoj\u010fme si vysv\u011btlit tento p\u0159\u00edkaz. Klient se spou\u0161t\u00ed pomoc\u00ed p\u0159\u00edkazu <code>docker<\/code>, s volbou <code>run<\/code>, kter\u00e1 \u0159\u00edk\u00e1, \u017ee bude spu\u0161t\u011bn nov\u00fd kontejner. Minim\u00e1ln\u00edmi po\u017eadavky pro spu\u0161t\u011bn\u00ed kontejneru jsou n\u00e1sleduj\u00edc\u00ed atribuce:<\/p>\n<ul>\n<li>jak\u00fd obraz pou\u017e\u00edt pro vytvo\u0159en\u00ed kontejneru. V na\u0161em p\u0159\u00edpad\u011b <code>ubuntu<\/code><\/li>\n<li>p\u0159\u00edkaz, kter\u00fd chcete spustit, kdy\u017e bude kontejner spu\u0161t\u011bn. V na\u0161em p\u0159\u00edpad\u011b <code>\/bin\/bash<\/code><\/li>\n<\/ul>\n<p>Co se vlastn\u011b d\u011bje pod kapotou, kdy\u017e spou\u0161t\u00edme tento p\u0159\u00edkaz?<\/p>\n<p>Docker postupn\u011b d\u011bl\u00e1 n\u00e1sleduj\u00edc\u00ed:<\/p>\n<ul>\n<li><b>stahuje obraz ubuntu:<\/b> docker kontroluje p\u0159\u00edtomnost obrazu <code>ubuntu<\/code> na m\u00edstn\u00edm po\u010d\u00edta\u010di, a pokud nen\u00ed \u2014 st\u00e1hne ho z <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/\">Docker Hub<\/a><\/noindex>. Pokud v\u0161ak obraz existuje, pou\u017eije ho k vytvo\u0159en\u00ed kontejneru;<\/li>\n<li><b>vytvo\u0159\u00ed kontejner:<\/b> kdy\u017e je obraz p\u0159ijat, docker ho pou\u017eije k vytvo\u0159en\u00ed kontejneru;<\/li>\n<li><b>inicializuje souborov\u00fd syst\u00e9m a p\u0159ipojuje read-only \u00farove\u0148:<\/b> kontejner je vytvo\u0159en v souborov\u00e9m syst\u00e9mu a read-only \u00farove\u0148 byla p\u0159id\u00e1na k obrazu;<\/li>\n<li><b>inicializuje s\u00ed\u0165\/most:<\/b> vytv\u00e1\u0159\u00ed s\u00ed\u0165ov\u00e9 rozhran\u00ed, kter\u00e9 umo\u017e\u0148uje dockeru komunikovat s hostitelsk\u00fdm po\u010d\u00edta\u010dem;<\/li>\n<li><b>Nastaven\u00ed IP adresy:<\/b> najde a ur\u010duje adresu;<\/li>\n<li><b>Spou\u0161t\u00ed zvolen\u00fd proces:<\/b> spou\u0161t\u00ed va\u0161i aplikaci;<\/li>\n<li><b>Zpracov\u00e1v\u00e1 a vykazuje v\u00fdstup va\u0161\u00ed aplikace:<\/b> p\u0159ipojuje se a zapisuje standardn\u00ed vstup, v\u00fdstup a chyby va\u0161\u00ed aplikace, abyste mohli sledovat, jak funguje va\u0161e aplikace.<\/li>\n<\/ul>\n<p>\nNyn\u00ed m\u00e1te funk\u010dn\u00ed kontejner. M\u016f\u017eete spravovat sv\u016fj kontejner a interagovat s va\u0161\u00ed aplikac\u00ed. Kdy\u017e se rozhodnete zastavit aplikaci, odstra\u0148te kontejner.<\/p>\n<h3>Pou\u017e\u00edvan\u00e9 technologie<\/h3>\n<p>\nDocker je naps\u00e1n v Go a vyu\u017e\u00edv\u00e1 n\u011bkter\u00e9 vlastnosti j\u00e1dra Linuxu k realizaci v\u00fd\u0161e uveden\u00e9 funk\u010dnosti.<\/p>\n<h4>Jmenn\u00e9 prostory (namespaces)<\/h4>\n<p>\nDocker pou\u017e\u00edv\u00e1 technologii <code>jmenn\u00e9 prostory<\/code> pro uspo\u0159\u00e1d\u00e1n\u00ed izolovan\u00fdch pracovn\u00edch prostor\u016f, kter\u00e9 naz\u00fdv\u00e1me kontejnery. Kdy\u017e spou\u0161t\u00edme kontejner, docker vytv\u00e1\u0159\u00ed sadu jmenn\u00fdch prostor\u016f pro dan\u00fd kontejner.<\/p>\n<p>To vytv\u00e1\u0159\u00ed izola\u010dn\u00ed \u00farove\u0148, ka\u017ed\u00fd aspekt kontejneru b\u011b\u017e\u00ed ve sv\u00e9m jmenn\u00e9m prostoru, a nem\u00e1 p\u0159\u00edstup k extern\u00edmu syst\u00e9mu.<\/p>\n<p>Seznam n\u011bkter\u00fdch jmenn\u00fdch prostor\u016f, kter\u00e9 docker pou\u017e\u00edv\u00e1:<\/p>\n<ul>\n<li><b>pid:<\/b> pro izolaci proces\u016f;<\/li>\n<li><b>net:<\/b> pro spr\u00e1vu s\u00ed\u0165ov\u00fdch rozhran\u00ed;<\/li>\n<li><b>ipc:<\/b> pro spr\u00e1vu IPC prost\u0159edk\u016f. (IPC: InterProcess Communication);<\/li>\n<li><b>mnt:<\/b> pro spr\u00e1vu bod\u016f p\u0159ipojen\u00ed;<\/li>\n<li><b>utc:<\/b> pro izolaci j\u00e1dra a kontrolu generace verz\u00ed (UTC: Unix timesharing system).<\/li>\n<\/ul>\n<h4>Control groups (kontroln\u00ed skupiny)<\/h4>\n<p>\nDocker tak\u00e9 pou\u017e\u00edv\u00e1 technologii <code>cgroups<\/code> nebo kontroln\u00ed skupiny. Kl\u00ed\u010dem k fungov\u00e1n\u00ed aplikace v izolaci je poskytnout aplikaci pouze ty zdroje, kter\u00e9 chcete poskytnout. To zaru\u010duje, \u017ee kontejnery budou dobr\u00fdmi sousedy. Kontroln\u00ed skupiny umo\u017e\u0148uj\u00ed rozd\u011blit dostupn\u00e9 zdroje hardwaru a v p\u0159\u00edpad\u011b pot\u0159eby nastavit limity a omezen\u00ed. Nap\u0159\u00edklad omezit mo\u017en\u00e9 mno\u017estv\u00ed pam\u011bti pro kontejner.<\/p>\n<h4>Union File System<\/h4>\n<p>\nUnion File System neboli UnionFS je souborov\u00fd syst\u00e9m, kter\u00fd funguje tak, \u017ee vytv\u00e1\u0159\u00ed vrstvy, co\u017e jej \u010din\u00ed velmi lehk\u00fdm a rychl\u00fdm. Docker pou\u017e\u00edv\u00e1 UnionFS k vytv\u00e1\u0159en\u00ed blok\u016f, ze kter\u00fdch se kontejner sestavuje. Docker m\u016f\u017ee pou\u017e\u00edt n\u011bkolik variant UnionFS v\u010detn\u011b: AUFS, btrfs, vfs a DeviceMapper.<\/p>\n<h4>Form\u00e1ty kontejner\u016f<\/h4>\n<p>\nDocker kombinuje tyto komponenty do obalu, kter\u00e9mu \u0159\u00edk\u00e1me form\u00e1t kontejneru. Form\u00e1t, kter\u00fd se pou\u017e\u00edv\u00e1 ve v\u00fdchoz\u00edm nastaven\u00ed, se naz\u00fdv\u00e1 <code>libcontainer<\/code>. Docker tak\u00e9 podporuje tradi\u010dn\u00ed form\u00e1t kontejner\u016f v Linuxu pomoc\u00ed <noindex><a rel=\"nofollow\" href=\"http:\/\/linuxcontainers.org\">LXC<\/a><\/noindex>. V budoucnu Docker m\u016f\u017ee podporovat i jin\u00e9 form\u00e1ty kontejner\u016f. Nap\u0159\u00edklad integrac\u00ed s BSD Jails nebo Solaris Zones.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/253877\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0423\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e docker \u0434\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\/\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432\u0435\u0431-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f\u043c \u00ab\u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440\u0430\u00bb \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432\u0432\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e docker \u2014 \u00abUnderstanding docker\u00bb. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0434\u043e\u043a\u0435\u0440? \u0414\u043e\u043a\u0435\u0440 \u2014 \u044d\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0438 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. Docker \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e docker \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36772","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0423\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e docker \u0434\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\/\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432\u0435\u0431-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.\" \/>\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\/cs\/blog\/administrirovanie\/ponimaya-docker\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\u041f\u043e\u043d\u0438\u043c\u0430\u044f Docker | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0423\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e docker \u0434\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\/\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432\u0435\u0431-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/ponimaya-docker\" \/>\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=\"2019-10-31T19:13:44+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:13:44+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\udd47Ch\u00e1p\u00e1n\u00ed Dockeru | ProHoster","description":"U\u017e n\u011bkolik m\u011bs\u00edc\u016f pou\u017e\u00edv\u00e1m Docker k strukturov\u00e1n\u00ed procesu v\u00fdvoje\/dod\u00e1vky webov\u00fdch projekt\u016f.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/ponimaya-docker","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\u041f\u043e\u043d\u0438\u043c\u0430\u044f Docker | ProHoster","og:description":"\u0423\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e docker \u0434\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\/\u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0432\u0435\u0431-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/ponimaya-docker","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":"2019-10-31T19:13:44+00:00","article:modified_time":"2019-10-31T19:13:44+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36772","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":"2026-01-22 04:47:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:39:22","updated":"2026-01-22 04:47:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/36772","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=36772"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/36772\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=36772"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=36772"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=36772"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}