{"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\/cs\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Co je to Docker: stru\u010dn\u00fd p\u0159ehled historie a z\u00e1kladn\u00edch abstrakc\u00ed","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>10. srpna v Sl\u00f6rmu za\u010dal <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">videokurz o Dockeru<\/a><\/noindex>, ve kter\u00e9m se zam\u011b\u0159ujeme na jeho \u00fapln\u00e9 pochopen\u00ed \u2014 od z\u00e1kladn\u00edch abstrakc\u00ed a\u017e po parametry s\u00edt\u011b. <\/p>\n<p><\/p>\n<p>V tomto \u010dl\u00e1nku si pov\u00edme o historii vzniku Dockeru a jeho z\u00e1kladn\u00edch abstrakc\u00edch: Image, Cli, Dockerfile. P\u0159edn\u00e1\u0161ka je ur\u010dena pro za\u010d\u00e1te\u010dn\u00edky, tak\u017ee pravd\u011bpodobn\u011b nebude zaj\u00edmav\u00e1 pro zku\u0161en\u00e9 u\u017eivatele. Nebudeme se zde zab\u00fdvat slo\u017eitostmi, krvav\u00fdmi detaily ani hlubok\u00fdm pono\u0159en\u00edm. Jen ty nejz\u00e1kladn\u011bj\u0161\u00ed informace.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co je to Docker: stru\u010dn\u00fd p\u0159ehled historie a z\u00e1kladn\u00edch abstrakc\u00ed\" 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\">Co je Docker<\/h2>\n<p><\/p>\n<p>Pod\u00edv\u00e1me se na definici Dockeru z Wikipedie.<\/p>\n<p><\/p>\n<blockquote><p>Docker je software pro automatizaci nasazov\u00e1n\u00ed a spr\u00e1vu aplikac\u00ed v prost\u0159ed\u00edch podporuj\u00edc\u00edch kontejnerizaci.<\/p><\/blockquote>\n<p>Z t\u00e9to definice nen\u00ed p\u0159\u00edli\u0161 jasn\u00e9, co to vlastn\u011b znamen\u00e1. Zejm\u00e9na co se mysl\u00ed \u201ev prost\u0159ed\u00edch podporuj\u00edc\u00edch kontejnerizaci\u201c. Abychom to pochopili, vr\u00e1t\u00edme se do minulosti. Za\u010dneme v obdob\u00ed, kter\u00e9 naz\u00fdv\u00e1m \u201eMonolitickou \u00e9rou\u201c.<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">Monolitick\u00e1 \u00e9ra<\/h2>\n<p><\/p>\n<p>Monolitick\u00e1 \u00e9ra je po\u010d\u00e1tek 2000. let, kdy byly v\u0161echny aplikace monolitick\u00e9, s mno\u017estv\u00edm z\u00e1vislost\u00ed. V\u00fdvoj trval dlouho. P\u0159itom server\u016f nebylo p\u0159\u00edli\u0161 mnoho, znali jsme je v\u0161echny jm\u00e9nem amonitorovali je. Je tu zaj\u00edmav\u00e9 p\u0159irovn\u00e1n\u00ed:<\/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=\"P\u0159ehr\u00e1t 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>Dom\u00e1c\u00ed zv\u00ed\u0159ata \u2014 to jsou na\u0161i dom\u00e1c\u00ed mazl\u00ed\u010dci. V monolitick\u00e9 \u00e9\u0159e jsme se k na\u0161im server\u016fm chovali jako k dom\u00e1c\u00edm mazl\u00edk\u016fm, h\u00fd\u010dkali jsme je a pe\u010dovali o n\u011b. Pro lep\u0161\u00ed spr\u00e1vu zdroj\u016f jsme pou\u017e\u00edvali virtualizaci: vzali jsme server a roz\u010dlenili ho na n\u011bkolik virtu\u00e1ln\u00edch stroj\u016f, \u010d\u00edm\u017e jsme zajistili izolaci prost\u0159ed\u00ed.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">Syst\u00e9my virtualizace zalo\u017een\u00e9 na hypervisoru<\/h2>\n<p><\/p>\n<p>O syst\u00e9mech virtualizace pravd\u011bpodobn\u011b sly\u0161el ka\u017ed\u00fd: VMware, VirtualBox, Hyper-V, Qemu KVM atd. Zaji\u0161\u0165uj\u00ed izolaci aplikac\u00ed a spr\u00e1vu zdroj\u016f, ale maj\u00ed i sv\u00e9 nev\u00fdhody. Pro vytvo\u0159en\u00ed virtualizace pot\u0159ebujeme hypervisor. A hypervisor znamen\u00e1 dodate\u010dn\u00fd po\u017eadavek na zdroje. A tak\u00e9 samotn\u00fd virtu\u00e1ln\u00ed stroj je obvykle dost robustn\u00ed \u2014 t\u011b\u017ek\u00fd obraz, na kter\u00e9m je opera\u010dn\u00ed syst\u00e9m, Nginx, Apache, mo\u017en\u00e1 i MySQL. Obraz je velk\u00fd, manipulace s virtu\u00e1ln\u00edmi stroji je obt\u00ed\u017en\u00e1. V d\u016fsledku toho m\u016f\u017ee pr\u00e1ce s virtu\u00e1ln\u00edmi stroji b\u00fdt pomal\u00e1. Abychom tento probl\u00e9m vy\u0159e\u0161ili, vytvo\u0159ili jsme syst\u00e9my virtualizace na \u00farovni j\u00e1dra.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Syst\u00e9my virtualizace na \u00farovni j\u00e1dra<\/h2>\n<p><\/p>\n<p>Virtualizaci na \u00farovni j\u00e1dra podporuj\u00ed syst\u00e9my OpenVZ, Systemd-nspawn, LXC. V\u00fdrazn\u00fdm p\u0159\u00edkladem takov\u00e9 virtualizace jsou LXC (Linux Containers). <\/p>\n<p><\/p>\n<p>LXC \u2014 syst\u00e9m virtualizace na \u00farovni opera\u010dn\u00edho syst\u00e9mu pro spu\u0161t\u011bn\u00ed n\u011bkolika izolovan\u00fdch instanc\u00ed opera\u010dn\u00edho syst\u00e9mu Linux na jednom uzlu. LXC nepou\u017e\u00edv\u00e1 virtu\u00e1ln\u00ed stroje, ale vytv\u00e1\u0159\u00ed virtu\u00e1ln\u00ed prost\u0159ed\u00ed s vlastn\u00edm prostorem proces\u016f a s\u00ed\u0165ov\u00fdm z\u00e1sobn\u00edkem.<\/p>\n<p><\/p>\n<p>V podstat\u011b LXC vytv\u00e1\u0159\u00ed kontejnery. Jak\u00fd je rozd\u00edl mezi virtu\u00e1ln\u00edmi stroji a kontejnery?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co je to Docker: stru\u010dn\u00fd p\u0159ehled historie a z\u00e1kladn\u00edch abstrakc\u00ed\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kontejner nen\u00ed vhodn\u00fd pro izolaci proces\u016f: v syst\u00e9mech virtualizace na \u00farovni j\u00e1dra se nach\u00e1zej\u00ed zranitelnosti, kter\u00e9 umo\u017e\u0148uj\u00ed dostat se z kontejneru na hostitele. Proto pokud pot\u0159ebujete n\u011bco izolovat, je lep\u0161\u00ed pou\u017e\u00edt virtu\u00e1ln\u00ed stroj.<\/p>\n<p><\/p>\n<p>Rozd\u00edly mezi virtualizac\u00ed a kontejnerizac\u00ed lze vid\u011bt na sch\u00e9matu.<br \/>\nExistuj\u00ed hardwarov\u00e9 hypervizory, hypervizory nad OS a kontejnery. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co je to Docker: stru\u010dn\u00fd p\u0159ehled historie a z\u00e1kladn\u00edch abstrakc\u00ed\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hardwarov\u00e9 hypervizory jsou skv\u011bl\u00fd n\u00e1stroj, pokud opravdu chcete n\u011bco izolovat. Proto\u017ee tam je mo\u017enost izolovat na \u00farovni str\u00e1nek pam\u011bti a procesor\u016f.<\/p>\n<p><\/p>\n<p>Existuj\u00ed hypervizory jako programy a jsou zde kontejnery, o kter\u00fdch budeme d\u00e1le hovo\u0159it. V syst\u00e9mech kontejnerizace hypervizor nen\u00ed, ale je zde Container Engine, kter\u00fd vytv\u00e1\u0159\u00ed kontejnery a spravuje je. Toto je leh\u010d\u00ed z\u00e1le\u017eitost, a d\u00edky pr\u00e1ci s j\u00e1drem je overhead men\u0161\u00ed, nebo dokonce \u017e\u00e1dn\u00fd.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">Co se pou\u017e\u00edv\u00e1 pro kontejnerizaci na \u00farovni j\u00e1dra<\/h2>\n<p>Hlavn\u00ed technologie, kter\u00e9 umo\u017e\u0148uj\u00ed vytvo\u0159it izolovan\u00fd kontejner od ostatn\u00edch proces\u016f, jsou Namespaces a Control Groups.<\/p>\n<p>Namespaces: PID, Networking, Mount a User. Existuj\u00ed i dal\u0161\u00ed, ale pro zjednodu\u0161en\u00ed porozum\u011bn\u00ed se zastav\u00edme u t\u011bchto.<\/p>\n<p>PID Namespace omezuje procesy. Kdy\u017e nap\u0159\u00edklad vytvo\u0159\u00edme PID Namespace a um\u00edst\u00edme do n\u011bj proces, st\u00e1v\u00e1 se z n\u011bj proces s PID 1. Obvykle v syst\u00e9mech PID 1 \u2014 to je systemd nebo init. Odpov\u00eddaj\u00edc\u00edm zp\u016fsobem, kdy\u017e um\u00edst\u00edme proces do nov\u00e9ho jmenn\u00e9ho prostoru, dostane tak\u00e9 PID 1.<\/p>\n<p>Networking Namespace umo\u017e\u0148uje omezit\/izolovat s\u00ed\u0165 a uvnit\u0159 ji\u017e um\u00edstit sv\u00e9 rozhran\u00ed. Mount \u2014 to je omezen\u00ed pro souborov\u00fd syst\u00e9m. User \u2014 omezen\u00ed podle u\u017eivatel\u016f.<\/p>\n<p>Control Groups: Memory, CPU, IOPS, Network \u2014 celkem asi 12 nastaven\u00ed. Jinak se tak\u00e9 naz\u00fdvaj\u00ed Cgroups (\u201eC skupiny\u201c).<\/p>\n<p>Control Groups spravuj\u00ed zdroje pro kontejner. Pomoc\u00ed Control Groups m\u016f\u017eeme \u0159\u00edct, \u017ee kontejner by nem\u011bl spot\u0159ebov\u00e1vat v\u00edce ne\u017e ur\u010dit\u00e9 mno\u017estv\u00ed zdroj\u016f.<\/p>\n<p>Aby kontejnerizace fungovala naplno, pou\u017e\u00edvaj\u00ed se dal\u0161\u00ed technologie: Capabilities, Copy-on-write a dal\u0161\u00ed.<\/p>\n<p>Capabilities znamenaj\u00ed, \u017ee \u0159\u00edk\u00e1me procesu, co m\u016f\u017ee nebo nem\u016f\u017ee d\u011blat. Na \u00farovni j\u00e1dra jde vlastn\u011b o bitov\u00e9 mapy s mnoha parametry. Nap\u0159\u00edklad u\u017eivatel root m\u00e1 pln\u00e9 opr\u00e1vn\u011bn\u00ed a m\u016f\u017ee d\u011blat cokoliv. Server \u010dasu m\u016f\u017ee m\u011bnit syst\u00e9mov\u00fd \u010das: m\u00e1 capabilities na Time Capsule a hotovo. Pomoc\u00ed opr\u00e1vn\u011bn\u00ed lze flexibiln\u011b nastavit omezen\u00ed pro procesy a t\u00edm se zajistit.<\/p>\n<p>Syst\u00e9m Copy-on-write n\u00e1m umo\u017e\u0148uje efektivn\u011bji pracovat s obrazy Docker.<\/p>\n<p><em>V sou\u010dasnosti m\u00e1 Docker probl\u00e9my s kompatibilitou Cgroups v2, a proto se v \u010dl\u00e1nku \u0159e\u0161\u00ed pr\u00e1v\u011b Cgroups v1.<\/em><\/p><\/blockquote>\n<p>Ale vra\u0165me se k historii. <\/p>\n<p><\/p>\n<p>Kdy\u017e se objevily virtualiza\u010dn\u00ed syst\u00e9my na \u00farovni j\u00e1dra, za\u010daly se aktivn\u011b pou\u017e\u00edvat. Oproti hypervizoru zmizel overhead, ale n\u011bkter\u00e9 probl\u00e9my z\u016fstaly:<\/p>\n<p><\/p>\n<ul>\n<li>velk\u00e9 obrazy: do OpenVZ se cpou opera\u010dn\u00ed syst\u00e9my, knihovny, spousta r\u016fzn\u00fdch softwar\u016f, a nakonec je obraz stejn\u011b docela velk\u00fd;<\/li>\n<li>nen\u00ed tu norm\u00e1ln\u00ed standard balen\u00ed a dod\u00e1v\u00e1n\u00ed, co\u017e p\u0159in\u00e1\u0161\u00ed probl\u00e9m se z\u00e1vislostmi. \u010casto se st\u00e1v\u00e1, \u017ee dva kusy k\u00f3du pou\u017e\u00edvaj\u00ed jednu knihovnu, ale v r\u016fzn\u00fdch verz\u00edch. Mezi nimi mohou nastat konflikty.<\/li>\n<\/ul>\n<p><\/p>\n<p>Abychom tyto probl\u00e9my vy\u0159e\u0161ili, p\u0159i\u0161la dal\u0161\u00ed \u00e9ra.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">\u00c9ra kontejner\u016f<\/h2>\n<p><\/p>\n<p>S p\u0159\u00edchodem \u00c9ry kontejner\u016f se zm\u011bnila filozofie pr\u00e1ce s nimi:<\/p>\n<p><\/p>\n<ul>\n<li>Jeden proces \u2014 jeden kontejner.<\/li>\n<li>V\u0161echny pot\u0159ebn\u00e9 z\u00e1vislosti procesu dod\u00e1v\u00e1me do jeho kontejneru. To vy\u017eaduje rozkouskovat monolity na mikroslu\u017eby.<\/li>\n<li>\u010c\u00edm men\u0161\u00ed obraz, t\u00edm lep\u0161\u00ed \u2014 m\u00e9n\u011b mo\u017en\u00fdch zranitelnost\u00ed, rychlej\u0161\u00ed nasazen\u00ed a tak d\u00e1le.<\/li>\n<li>Instance se st\u00e1vaj\u00ed efem\u00e9rn\u00edmi. <\/li>\n<\/ul>\n<p><\/p>\n<p>Pamatujete, jak jsem mluvil o pets vs cattle? D\u0159\u00edve byly instance jako dom\u00e1c\u00ed mazl\u00ed\u010dci, nyn\u00ed se staly jako skot. D\u0159\u00edve byl monolit \u2014 jedna aplikace. Nyn\u00ed je to 100 mikroslu\u017eeb, 100 kontejner\u016f. N\u011bkter\u00e9 kontejnery mohou m\u00edt 2-3 repliky. Nen\u00ed pro n\u00e1s tolik d\u016fle\u017eit\u00e9 kontrolovat ka\u017ed\u00fd kontejner. D\u016fle\u017eit\u011bj\u0161\u00ed je pro n\u00e1s dostupnost samotn\u00e9 slu\u017eby: toho, co d\u011bl\u00e1 tato sada kontejner\u016f. To m\u011bn\u00ed p\u0159\u00edstupy k monitorov\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p>V letech 2014-2015 nastal rozkv\u011bt Dockeru \u2014 technologie, o kter\u00e9 budeme nyn\u00ed mluvit.<\/p>\n<p><\/p>\n<p>Docker zm\u011bnil filozofii a standardizoval balen\u00ed aplikac\u00ed. S pomoc\u00ed Dockeru m\u016f\u017eeme zabalit aplikaci, poslat ji do repozit\u00e1\u0159e, st\u00e1hnout ji odtud a nasadit. <\/p>\n<p><\/p>\n<p>Do Docker kontejneru zahrnujeme v\u0161e pot\u0159ebn\u00e9, \u010d\u00edm\u017e se vy\u0159e\u0161\u00ed probl\u00e9m z\u00e1vislost\u00ed. Docker zaru\u010duje reprodukovatelnost. Mysl\u00edm, \u017ee se mnoz\u00ed z n\u00e1s setkali s nereprodukovatelnost\u00ed: v\u0161echno ti funguje, odpushuje\u0161 to na produkci a tam to p\u0159estane fungovat. S Dockerem tento probl\u00e9m zmiz\u00ed. Pokud se tv\u016fj Docker kontejner spust\u00ed a d\u011bl\u00e1 to, co m\u00e1, je velk\u00e1 pravd\u011bpodobnost, \u017ee se spust\u00ed i na produkci a ud\u011bl\u00e1 tot\u00e9\u017e.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">Odbo\u010dka o overheadu<\/h2>\n<p>T\u00e9ma overheadu je neust\u00e1le sporn\u00e9. N\u011bkte\u0159\u00ed lid\u00e9 tvrd\u00ed, \u017ee Docker nenese dodate\u010dn\u00e9 zat\u00ed\u017een\u00ed, proto\u017ee vyu\u017e\u00edv\u00e1 j\u00e1dro Linuxu a v\u0161echny jeho procesy pot\u0159ebn\u00e9 pro kontejnerizaci. \u0158\u00edkaj\u00ed, \u017ee pokud \u0159\u00edk\u00e1te, \u017ee Docker je overhead, pak je i j\u00e1dro Linuxu overhead.<\/p>\n<p>Na druhou stranu, pokud se na to pod\u00edv\u00e1me hloub\u011bji, opravdu existuje n\u011bkolik v\u011bc\u00ed v Dockeru, kter\u00e9 bychom s nads\u00e1zkou mohli ozna\u010dit za overhead.<\/p>\n<p>Prvn\u00ed v\u011bc je PID namespace. Kdy\u017e um\u00edst\u00edme n\u011bjak\u00fd proces do namespace, dostane PID 1. Z\u00e1rove\u0148 m\u00e1 tento proces je\u0161t\u011b jedno PID, kter\u00e9 se nach\u00e1z\u00ed na hostitelsk\u00e9m namespace, mimo kontejner. Nap\u0159\u00edklad, spustili jsme v kontejneru Nginx, stal se PID 1 (master proces). Na hostiteli m\u00e1 PID 12623. A t\u011b\u017eko \u0159\u00edct, jak velk\u00e9 je to overhead.<\/p>\n<p>Druh\u00e1 v\u011bc jsou Cgroups. Pokud vezmeme Cgroups pro pam\u011b\u0165, tedy mo\u017enost omezit kontejneru pam\u011b\u0165. P\u0159i jej\u00edm zapnut\u00ed se aktivuj\u00ed po\u010d\u00edtadla, memory accounting: j\u00e1dro mus\u00ed rozum\u011bt, kolik str\u00e1nek bylo p\u0159id\u011bleno a kolik je je\u0161t\u011b voln\u00fdch pro tento kontejner. To m\u016f\u017ee b\u00fdt overhead, ale nestudoval jsem p\u0159esn\u00e9 v\u00fdzkumy o tom, jak to ovliv\u0148uje v\u00fdkon. A s\u00e1m jsem si nev\u0161iml, \u017ee by aplikace spu\u0161t\u011bn\u00e1 v Dockeru n\u00e1hle ztr\u00e1cela na v\u00fdkonu. <\/p>\n<p>A je\u0161t\u011b jedna pozn\u00e1mka k v\u00fdkonu. N\u011bkter\u00e9 parametry j\u00e1dra se pasuj\u00ed z hostitele do kontejneru. Zejm\u00e9na n\u011bkter\u00e9 s\u00ed\u0165ov\u00e9 parametry. Pokud tedy chcete v Dockeru spustit n\u011bco vysoce v\u00fdkonn\u00e9ho, nap\u0159\u00edklad n\u011bco, co bude aktivn\u011b vyu\u017e\u00edvat s\u00ed\u0165, mus\u00edte tyto parametry minim\u00e1ln\u011b upravit. Nap\u0159\u00edklad nf_conntrack. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">O konceptu Dockeru<\/h2>\n<p><\/p>\n<p>Docker se skl\u00e1d\u00e1 z n\u011bkolika komponent\u016f: <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2014 to je ten spr\u00e1vn\u00fd Container Engine; spou\u0161t\u00ed kontejnery. <\/li>\n<li>Docker CII \u2014 n\u00e1stroj pro spr\u00e1vu Dockeru.<\/li>\n<li>Dockerfile \u2014 instrukce, jak vytvo\u0159it obraz.<\/li>\n<li>Image \u2014 obraz, ze kter\u00e9ho se rozbal\u00ed kontejner.<\/li>\n<li>Kontejner.<\/li>\n<li>Docker registry \u2014 \u00falo\u017ei\u0161t\u011b obraz\u016f.<\/li>\n<\/ol>\n<p><\/p>\n<p>Schematicky to vypad\u00e1 p\u0159ibli\u017en\u011b takto:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co je to Docker: stru\u010dn\u00fd p\u0159ehled historie a z\u00e1kladn\u00edch abstrakc\u00ed\" src=\"\/wp-content\/uploads\/2020\/08\/73ccc02c14485f72cfd7c64e3074f3b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Na Docker_host b\u011b\u017e\u00ed Docker daemon, spou\u0161t\u00ed kontejnery. Existuje Client, kter\u00fd p\u0159ed\u00e1v\u00e1 p\u0159\u00edkazy: vytvo\u0159 obraz, st\u00e1hni obraz, spus\u0165 kontejner. Docker daemon jde do registry a vykon\u00e1v\u00e1 je. Docker klient m\u016f\u017ee komunikovat jak lok\u00e1ln\u011b (p\u0159es unixov\u00fd socket), tak i p\u0159es TCP z vzd\u00e1len\u00e9ho hostitele.<\/p>\n<p><\/p>\n<p>Projdeme si ka\u017ed\u00fd komponent.<\/p>\n<p><\/p>\n<p><u>Docker daemon (d\u00e9mon)<\/u> \u2014 to je serverov\u00e1 \u010d\u00e1st, funguje na hostitelsk\u00e9m stroji: stahuje obrazy a spou\u0161t\u00ed z nich kontejnery, vytv\u00e1\u0159\u00ed s\u00ed\u0165 mezi kontejnery, shroma\u017e\u010fuje logy. Kdy\u017e \u0159\u00edk\u00e1me \u201evytvo\u0159 obraz\u201c, toto tak\u00e9 prov\u00e1d\u00ed d\u00e9mon.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2014 klientsk\u00e1 \u010d\u00e1st Dockeru, konzolov\u00fd n\u00e1stroj pro pr\u00e1ci s d\u00e9monem. Opakuji, m\u016f\u017ee fungovat nejen lok\u00e1ln\u011b, ale i p\u0159es s\u00ed\u0165. <\/p>\n<p><\/p>\n<p><strong>Z\u00e1kladn\u00ed p\u0159\u00edkazy:<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2014 zobrazit kontejnery, kter\u00e9 jsou nyn\u00ed spu\u0161t\u011bny na Docker hostiteli.<br \/>\ndocker images \u2014 zobrazit obrazy sta\u017een\u00e9 lok\u00e1ln\u011b.<br \/>\ndocker search  \u2014 hled\u00e1n\u00ed obrazu v registry.<br \/>\ndocker pull  \u2014 st\u00e1hnout obraz z registry na stroj.<br \/>\ndocker build &lt;&gt; \u2014 vytvo\u0159it obraz.<br \/>\ndocker run  \u2014 spustit kontejner.<br \/>\ndocker rm  \u2014 odstranit kontejner.<br \/>\ndocker logs  \u2014 logy kontejneru.<br \/>\ndocker start\/stop\/restart  \u2014 pr\u00e1ce s kontejnerem.\n<\/p>\n<p>Pokud zvl\u00e1dnete tyto p\u0159\u00edkazy a budete je um\u011bt bez probl\u00e9m\u016f pou\u017e\u00edvat, m\u016f\u017eete pova\u017eovat, \u017ee m\u00e1te 70 % zvl\u00e1dnuto na \u00farovni u\u017eivatele Dockeru.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2014 instrukce pro vytvo\u0159en\u00ed obrazu. T\u00e9m\u011b\u0159 ka\u017ed\u00fd p\u0159\u00edkaz v instrukc\u00edch je nov\u00e1 vrstva. Pod\u00edvejme se na p\u0159\u00edkladu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Co je to Docker: stru\u010dn\u00fd p\u0159ehled historie a z\u00e1kladn\u00edch abstrakc\u00ed\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Takto vypad\u00e1 Dockerfile: vlevo p\u0159\u00edkazy, vpravo \u2014 argumenty. Ka\u017ed\u00fd p\u0159\u00edkaz, kter\u00fd zde je (a v\u016fbec se p\u00ed\u0161e v Dockerfile), vytv\u00e1\u0159\u00ed novou vrstvu v Image. <\/p>\n<p><\/p>\n<p>I kdy\u017e se pod\u00edv\u00e1te na levou \u010d\u00e1st, m\u016f\u017eete si p\u0159ibli\u017en\u011b p\u0159edstavit, co se d\u011bje. \u0158\u00edk\u00e1me: \u201evytvo\u0159 n\u00e1m slo\u017eku\u201c \u2014 to je jedna vrstva. \u201eUd\u011blej slo\u017eku aktivn\u00ed\u201c \u2014 to je dal\u0161\u00ed vrstva, a tak d\u00e1le. V\u00edcevrstv\u00fd kol\u00e1\u010d usnad\u0148uje \u017eivot. Pokud vytvo\u0159\u00edm dal\u0161\u00ed Dockerfile a na posledn\u00edm \u0159\u00e1dku n\u011bco zm\u011bn\u00edm \u2014 nebudu spou\u0161t\u011bt \"python\" \"main.py\", ale n\u011bco jin\u00e9ho, nebo nainstaluji z\u00e1vislosti z jin\u00e9ho souboru \u2014 p\u0159edchoz\u00ed vrstvy budou znovu pou\u017eity, jako cache.<\/p>\n<p><\/p>\n<p><u>Obr\u00e1zek<\/u> \u2014 je to obal kontejneru, ze kter\u00e9ho se spou\u0161t\u00ed kontejnery. Kdy\u017e se na Docker pod\u00edv\u00e1me jako na spr\u00e1vce bal\u00ed\u010dk\u016f (jako bychom pracovali s bal\u00ed\u010dky deb nebo rpm), pak image je v podstat\u011b rpm bal\u00ed\u010dek. Pomoc\u00ed yum install m\u016f\u017eeme nainstalovat aplikaci, odebrat ji, naj\u00edt v repozit\u00e1\u0159i, st\u00e1hnout. Tady je to podobn\u00e9: z obrazu se spou\u0161t\u00ed kontejnery, kter\u00e9 se ukl\u00e1daj\u00ed v Docker registry (podobn\u011b jako yum, v repozit\u00e1\u0159i), a ka\u017ed\u00fd image m\u00e1 hash SHA-256, n\u00e1zev a tag.<\/p>\n<p><\/p>\n<p>Image se sestavuje podle instrukc\u00ed z Dockerfile. Ka\u017ed\u00e1 instrukce z Dockerfile vytv\u00e1\u0159\u00ed novou vrstvu. Vrstvy mohou b\u00fdt znovu pou\u017eity.<\/p>\n<p><\/p>\n<p><u>Docker registry<\/u> \u2014 je repozit\u00e1\u0159 obraz\u016f Docker. Podobn\u011b jako opera\u010dn\u00ed syst\u00e9m m\u00e1 Docker ve\u0159ejn\u00fd standardn\u00ed registr \u2014 Docker Hub. Je v\u0161ak mo\u017en\u00e9 vytvo\u0159it si vlastn\u00ed repozit\u00e1\u0159, svou Docker registry. <\/p>\n<p><\/p>\n<p><u>Kontejner<\/u> \u2014 je to, co se spou\u0161t\u00ed z obrazu. Podle instrukc\u00ed z Dockerfile jsme sestavili image, a pot\u00e9 ho z tohoto obrazu spou\u0161t\u00edme. Tento kontejner je izolov\u00e1n od ostatn\u00edch kontejner\u016f, m\u011bl by obsahovat v\u0161e pot\u0159ebn\u00e9 k b\u011bhu aplikace. P\u0159i\u010dem\u017e jeden kontejner = jeden proces. N\u011bkdy je t\u0159eba ud\u011blat dva procesy, ale to trochu odporuje ideologii Docker.<\/p>\n<p><\/p>\n<p>Po\u017eadavek \u201ejeden kontejner \u2014 jeden proces\u201c souvis\u00ed s PID Namespace. Kdy\u017e se v Namespace spust\u00ed proces s PID 1, pokud n\u00e1hle zem\u0159e, cel\u00fd kontejner tak\u00e9 um\u00edr\u00e1. Pokud jsou v\u0161ak spu\u0161t\u011bny dva procesy: jeden \u017eije a druh\u00fd zem\u0159el, kontejner bude i tak pokra\u010dovat v \u017eivot\u011b. Ale to je k ot\u00e1zce Nejlep\u0161\u00edch praktik, o t\u011bch budeme mluvit v dal\u0161\u00edch materi\u00e1lech.<\/p>\n<p><\/p>\n<p>Podrobn\u011bji sezn\u00e1mit se s vlastnostmi a cel\u00fdm programem kurzu lze na odkazu: \u201e<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Videokurz o Dockeru<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>Autor: Marsel Ibrajev, certifikovan\u00fd administr\u00e1tor Kubernetes, praktikuj\u00edc\u00ed in\u017een\u00fdr ve spole\u010dnosti Southbridge, \u0159e\u010dn\u00edk a v\u00fdvoj\u00e1\u0159 kurz\u016f Sl\u011brm.<\/em><\/p>\n<p>Zdroj: <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.3 - 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\/cs\/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.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\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\/cs\/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\udd47Co je Docker: stru\u010dn\u00fd exkurz do historie a z\u00e1kladn\u00edch abstrakc\u00ed | ProHoster","description":"10. srpna za\u010dal na Sl\u011brm videokurz o Dockeru, ve kter\u00e9m se podrobn\u011b zab\u00fdv\u00e1me t\u00edmto t\u00e9matem \u2014 od z\u00e1kladn\u00edch abstrakc\u00ed po parametry s\u00edt\u011b.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","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\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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/91905","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=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}