{"id":793,"date":"2021-04-13T12:41:45","date_gmt":"2021-04-13T12:41:45","guid":{"rendered":"https:\/\/dev.sourcecode.sk\/wsczkb\/?post_type=ht_kb&#038;p=793"},"modified":"2021-10-12T14:22:15","modified_gmt":"2021-10-12T12:22:15","slug":"docker-2-dockerfiles-a-images","status":"publish","type":"ht_kb","link":"https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/","title":{"rendered":"Docker &#8211; 2. Dockerfiles a images"},"content":{"rendered":"\n<p><a href=\"https:\/\/www.websupport.cz\/podpora\/kb\/docker-1-predstaveni-instalace-a-zakladni-operace\/\">V p\u0159ede\u0161l\u00e9 \u010dasti tohoto seri\u00e1lu<\/a> jsme si p\u0159edstavili koncept a n\u00e1stroje projektu Docker a t\u00e9\u017e jsme si Docker nainstalovali. Zm\u00ednili jsme si, \u017ee z\u00e1klad tvo\u0159\u00ed kontejnery. V t\u00e9to \u010dasti si na p\u0159\u00edkladech uk\u00e1\u017eeme, co se vlastn\u011b d\u011bje p\u0159ed samotn\u00fdm spu\u0161t\u011bn\u00edm kontejner\u016f. Zkr\u00e1tka, budeme se v\u011bnovat obsahu textov\u00e9ho konfigura\u010dn\u00edho souboru <strong>Dockerfile<\/strong> a tomu, jak ovliv\u0148uje spu\u0161t\u011bn\u00ed obrazu (<strong>image<\/strong>).<\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon\">Tip: <strong>Docker b\u011b\u017e\u00ed v\u00fdborn\u011b ve <a href=\"https:\/\/www.websupport.cz\/servery\/vps\/\">WebSupport VPS<\/a><\/strong>. Vysou\u0161ejte pr\u00e9miov\u00fd virtu\u00e1ln\u00ed server je\u0161t\u011b dnes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co je Dockerfile a jak ho pou\u017e\u00edt<\/h2>\n\n\n\n<p>Dockerfile je konfigura\u010dn\u00ed textov\u00fd soubor, do kter\u00e9ho zapisujeme p\u0159\u00edkazy na automatizaci sestaven\u00ed (build) a spu\u0161t\u011bn\u00ed (run) obrazu (image). M\u016f\u017eeme nap\u0159\u00edklad nechat nainstalovat pot\u0159ebn\u00fd software \u010di r\u016fzn\u00e9 z\u00e1vislosti, abychom zabezpe\u010dili stabiln\u00ed v\u00fdvoj\u00e1\u0159sk\u00e9 prost\u0159ed\u00ed. Kdy\u017e tvo\u0159\u00edme soubor Dockerfile, dobr\u00e1 praxe je um\u00edstit ho do samostatn\u00e9 slo\u017eky spolu se v\u0161emi soubory, kter\u00e9 chceme na sestaven\u00ed (build) a na spu\u0161t\u011bn\u00ed (run) obrazu (image) pou\u017e\u00edt. P\u0159\u00edklad se slo\u017ekou s n\u00e1zvem <code>docker-test<\/code> v domovsk\u00e9 slo\u017ece p\u0159ihl\u00e1\u0161en\u00e9ho u\u017eivatele (vlnovka):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir ~\/docker-test &amp;&amp; cd ~\/docker-test<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">touch Dockerfile<\/pre>\n\n\n\n<p>Vytvo\u0159ili jsme si tedy slo\u017eku s n\u00e1zvem <code>docker-test<\/code> v domovsk\u00e9 slo\u017ece p\u0159ihl\u00e1\u0161en\u00e9ho u\u017eivatele (vlnovka), p\u0159em\u00edstili jsme se do n\u011bj (prvn\u00ed \u0159\u00e1dek) a n\u00e1sledn\u011b jsme v pr\u00e1zdn\u00e9 slo\u017ece docker-test vytvo\u0159ili textov\u00fd soubor s n\u00e1zvem <code>Dockerfile<\/code> (druh\u00fd \u0159\u00e1dek). <\/p>\n\n\n\n<p class=\"wp-block-ht-blocks-messages wp-block-hb-message wp-block-hb-message--withicon is-style-info\">V opera\u010dn\u00edm syst\u00e9mu Windows n\u00e1zev souboru mus\u00ed b\u00fdt <em>bez koncovky<\/em>, kter\u00e1 se ve Windowsu oby\u010dejn\u011b p\u0159id\u00e1v\u00e1 do n\u00e1zvu soubor\u016f za posledn\u00ed te\u010dku vpravo (nap\u0159. p\u0159\u00edpona txt).<\/p>\n\n\n\n<p>P\u0159iprav\u00edme si velmi jednoduch\u00fd soubor s n\u00e1zvem <code>index.html<\/code>, kter\u00fd pozd\u011bji nech\u00e1me na\u010d\u00edst p\u0159es webov\u00fd server Nginx v kontejneru:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">echo \"Ahoj z Docker kontejneru!\" &gt; index.html<\/pre>\n\n\n\n<p>Aktu\u00e1ln\u011b se ve slo\u017ece docker-test nach\u00e1zej\u00ed 2 soubory: Dockerfile a index.html. Do souboru <code>Dockerfile<\/code> si te\u010f zap\u00ed\u0161eme, \u017ee chceme nainstalovat webov\u00fd server Nginx (prvn\u00ed \u0159\u00e1dek). P\u0159\u00edkazem na druh\u00e9m \u0159\u00e1dku, do obrazu zkop\u00edrujeme soubor <code>index.html<\/code>, kter\u00fd pozd\u011bji zobraz\u00edme p\u0159es Nginx. Otev\u0159eme si soubor <code>Dockerfile<\/code> v textov\u00e9m editoru <code>nano<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano Dockerfile<\/pre>\n\n\n\n<p>a zap\u00ed\u0161eme jednoduch\u00fd skript se 2 \u0159\u00e1dky:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">FROM nginx<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">COPY index.html \/usr\/share\/nginx\/html<\/pre>\n\n\n\n<p>Soubor ulo\u017e\u00edme pomoc\u00ed kl\u00e1vesov\u00e9 zkratky <code>Ctrl + X<\/code> a n\u00e1sledn\u011b stla\u010den\u00edm kl\u00e1vesy <code>y<\/code> a potvrzen\u00edm kl\u00e1vesou enter.<\/p>\n\n\n\n<p>P\u0159\u00edkazy <code>FROM<\/code> a <code>COPY<\/code> jsou pouze dva z dal\u0161\u00edch podporovan\u00fdch. V ostatn\u00edch \u010d\u00e1stech tohoto seri\u00e1lu se budeme zaob\u00edrat s v\u00edcer\u00fdmi p\u0159\u00edkazy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sestavujeme a spou\u0161t\u00edme obrazy (images)<\/h2>\n\n\n\n<p>Konfigura\u010dn\u00ed soubor <code>Dockerfile<\/code> m\u00e1me p\u0159ipraven\u00fd a te\u010f m\u016f\u017eeme sestavit (build) a spustit (run) obraz (image). Abychom si ov\u011b\u0159ili spr\u00e1vnost napsan\u00e9ho skriptu v souboru <code>Dockerfile<\/code>, nech\u00e1me na z\u00e1klad\u011b jeho obsahu sestavit obraz s n\u00e1zvem <code>nginx-test<\/code> (nezapomeneme zkop\u00edrovat i tu te\u010dku na konci):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker build -t nginx-test .<\/pre>\n\n\n\n<p>N\u00e1sledn\u011b zjist\u00edme, jestli je sestaven\u00fd obraz v seznamu obraz\u016f:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker image ls<\/pre>\n\n\n\n<p>Jeliko\u017e jsme dote\u010f nesestavovali \u017e\u00e1dn\u00e9 jin\u00e9 obrazy, vyp\u00ed\u0161ou se 2 obrazy. Jeden s n\u00e1zvem <code>nginx<\/code> a druh\u00fd <code>nginx-test<\/code>. Ten prvn\u00ed je z\u00e1kladn\u00ed obraz, na kter\u00e9m je postaven\u00fd ten druh\u00fd. Do druh\u00e9ho jsme zkop\u00edrovali soubor index.html, proto budeme spou\u0161t\u011bt pr\u00e1v\u011b tento obraz:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker run -d nginx-test<\/pre>\n\n\n\n<p>\u017de se obraz s n\u00e1zvem nginx-test spustil a vytvo\u0159il tak kontejner s webov\u00fdm serverem Nginx, zjist\u00edme pomoc\u00ed p\u0159\u00edkazu:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker ps<\/pre>\n\n\n\n<p>Vypsal se seznam spu\u0161t\u011bn\u00fdch kontejner\u016f. Abychom se do kontejneru dostali a zjistili, jestli v n\u011bm v\u0161echno funguje jak m\u00e1, pot\u0159ebujeme CONTAINER ID (12 znak\u016f z prvn\u00edho sloupce &#8211; zde <code>be08a567a805<\/code>, va\u0161e se budou li\u0161it). Takto se tedy do kontejneru dostaneme:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker exec -it be08a567a805 bash<\/pre>\n\n\n\n<p>Z\u00edskali jsme p\u0159\u00edstup do p\u0159\u00edkazov\u00e9ho \u0159\u00e1dku (bash) ve vnit\u0159ku kontejneru <code>be08a567a805<\/code> a te\u010f u\u017e pouze sta\u010d\u00ed vyzkou\u0161et, jestli webov\u00fd server Nginx funguje a opravdu zobraz\u00ed obsah souboru index.html:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">curl localhost<\/pre>\n\n\n\n<p>Po spu\u0161t\u011bn\u00ed p\u0159\u00edkazu se n\u00e1m zobraz\u00ed obsah souboru <code>index.html<\/code> (Ahoj z Docker kontejneru!), co\u017e znamen\u00e1, \u017ee webov\u00fd server Nginx funguje a zobrazuje spr\u00e1vn\u00fd obsah.<\/p>\n\n\n\n<p>Spu\u0161t\u011bn\u00fd kontejner ukon\u010d\u00edme (prvn\u00ed \u0159\u00e1dek) a vyma\u017eeme (druh\u00fd \u0159\u00e1dek):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker stop be08a567a805<\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\">docker rm be08a567a805<\/pre>\n\n\n\n<p>Te\u010f m\u016f\u017eeme zm\u011bnit obsah souboru <code>index.html<\/code> ve slo\u017ece <code>docker-test<\/code> a op\u011bt sestavit (build) a spustit (run) obraz (image) s n\u00e1zvem <code>nginx-test<\/code>, jak p\u00ed\u0161eme v\u00fd\u0161e.<\/p>\n\n\n\n<p>Abychom p\u0159i ka\u017ed\u00e9 zm\u011bn\u011b obsahu souboru <code>index.html<\/code> nemuseli ukon\u010dovat, mazat, sestavovat a spou\u0161t\u011bt obraz, pracujeme s obsahem (volume).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Shrnut\u00ed<\/h2>\n\n\n\n<p>Uk\u00e1zali jsme si jak sestavit (build) a spustit (run) obraz (image) s konkr\u00e9tn\u00edmi nastaven\u00edmi, kter\u00e9 jsme zapsali do textov\u00e9ho konfigura\u010dn\u00edho souboru <code>Dockerfile<\/code>. Dostali jsme se do vnitra spu\u0161t\u011bn\u00e9ho obrazu (\u010dili do kontejneru), abychom si ov\u011b\u0159ili, \u017ee v\u0161echno funguje spr\u00e1vn\u011b. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>V p\u0159ede\u0161l\u00e9 \u010dasti tohoto seri\u00e1lu jsme si p\u0159edstavili koncept a n\u00e1stroje projektu Docker a t\u00e9\u017e jsme si Docker nainstalovali. Zm\u00ednili jsme si, \u017ee z\u00e1klad tvo\u0159\u00ed kontejnery. V t\u00e9to \u010dasti si na p\u0159\u00edkladech uk\u00e1\u017eeme, co se vlastn\u011b d\u011bje p\u0159ed samotn\u00fdm spu\u0161t\u011bn\u00edm kontejner\u016f. Zkr\u00e1tka, budeme se v\u011bnovat obsahu textov\u00e9ho konfigura\u010dn\u00edho souboru Dockerfile&#8230;<\/p>\n","protected":false},"author":3,"template":"","format":"standard","meta":{"footnotes":""},"ht-kb-category":[126],"ht-kb-tag":[],"class_list":["post-793","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-docker"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Docker - 2. Dockerfiles a images - Websupport Centrum n\u00e1pov\u011bdy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/\" \/>\n<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker - 2. Dockerfiles a images - Websupport Centrum n\u00e1pov\u011bdy\" \/>\n<meta property=\"og:description\" content=\"V p\u0159ede\u0161l\u00e9 \u010dasti tohoto seri\u00e1lu jsme si p\u0159edstavili koncept a n\u00e1stroje projektu Docker a t\u00e9\u017e jsme si Docker nainstalovali. Zm\u00ednili jsme si, \u017ee z\u00e1klad tvo\u0159\u00ed kontejnery. V t\u00e9to \u010dasti si na p\u0159\u00edkladech uk\u00e1\u017eeme, co se vlastn\u011b d\u011bje p\u0159ed samotn\u00fdm spu\u0161t\u011bn\u00edm kontejner\u016f. Zkr\u00e1tka, budeme se v\u011bnovat obsahu textov\u00e9ho konfigura\u010dn\u00edho souboru Dockerfile...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/\" \/>\n<meta property=\"og:site_name\" content=\"Websupport Centrum n\u00e1pov\u011bdy\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-12T12:22:15+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Odhadovan\u00e1 doba \u010dten\u00ed\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/kb\\\/docker-2-dockerfiles-a-images\\\/\",\"url\":\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/kb\\\/docker-2-dockerfiles-a-images\\\/\",\"name\":\"Docker - 2. Dockerfiles a images - Websupport Centrum n\u00e1pov\u011bdy\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/#website\"},\"datePublished\":\"2021-04-13T12:41:45+00:00\",\"dateModified\":\"2021-10-12T12:22:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/kb\\\/docker-2-dockerfiles-a-images\\\/#breadcrumb\"},\"inLanguage\":\"cs\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/kb\\\/docker-2-dockerfiles-a-images\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/kb\\\/docker-2-dockerfiles-a-images\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker &#8211; 2. Dockerfiles a images\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/#website\",\"url\":\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/\",\"name\":\"Websupport Centrum n\u00e1pov\u011bdy\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.websupport.cz\\\/podpora\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"cs\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker - 2. Dockerfiles a images - Websupport Centrum n\u00e1pov\u011bdy","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/","og_locale":"cs_CZ","og_type":"article","og_title":"Docker - 2. Dockerfiles a images - Websupport Centrum n\u00e1pov\u011bdy","og_description":"V p\u0159ede\u0161l\u00e9 \u010dasti tohoto seri\u00e1lu jsme si p\u0159edstavili koncept a n\u00e1stroje projektu Docker a t\u00e9\u017e jsme si Docker nainstalovali. Zm\u00ednili jsme si, \u017ee z\u00e1klad tvo\u0159\u00ed kontejnery. V t\u00e9to \u010dasti si na p\u0159\u00edkladech uk\u00e1\u017eeme, co se vlastn\u011b d\u011bje p\u0159ed samotn\u00fdm spu\u0161t\u011bn\u00edm kontejner\u016f. Zkr\u00e1tka, budeme se v\u011bnovat obsahu textov\u00e9ho konfigura\u010dn\u00edho souboru Dockerfile...","og_url":"https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/","og_site_name":"Websupport Centrum n\u00e1pov\u011bdy","article_modified_time":"2021-10-12T12:22:15+00:00","twitter_card":"summary_large_image","twitter_misc":{"Odhadovan\u00e1 doba \u010dten\u00ed":"3 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/","url":"https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/","name":"Docker - 2. Dockerfiles a images - Websupport Centrum n\u00e1pov\u011bdy","isPartOf":{"@id":"https:\/\/www.websupport.cz\/podpora\/#website"},"datePublished":"2021-04-13T12:41:45+00:00","dateModified":"2021-10-12T12:22:15+00:00","breadcrumb":{"@id":"https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/#breadcrumb"},"inLanguage":"cs","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.websupport.cz\/podpora\/kb\/docker-2-dockerfiles-a-images\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.websupport.cz\/podpora\/"},{"@type":"ListItem","position":2,"name":"Docker &#8211; 2. Dockerfiles a images"}]},{"@type":"WebSite","@id":"https:\/\/www.websupport.cz\/podpora\/#website","url":"https:\/\/www.websupport.cz\/podpora\/","name":"Websupport Centrum n\u00e1pov\u011bdy","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.websupport.cz\/podpora\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"cs"}]}},"_links":{"self":[{"href":"https:\/\/www.websupport.cz\/podpora\/wp-json\/wp\/v2\/ht-kb\/793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.websupport.cz\/podpora\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/www.websupport.cz\/podpora\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/www.websupport.cz\/podpora\/wp-json\/wp\/v2\/users\/3"}],"version-history":[{"count":4,"href":"https:\/\/www.websupport.cz\/podpora\/wp-json\/wp\/v2\/ht-kb\/793\/revisions"}],"predecessor-version":[{"id":7091,"href":"https:\/\/www.websupport.cz\/podpora\/wp-json\/wp\/v2\/ht-kb\/793\/revisions\/7091"}],"wp:attachment":[{"href":"https:\/\/www.websupport.cz\/podpora\/wp-json\/wp\/v2\/media?parent=793"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/www.websupport.cz\/podpora\/wp-json\/wp\/v2\/ht-kb-category?post=793"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/www.websupport.cz\/podpora\/wp-json\/wp\/v2\/ht-kb-tag?post=793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}