{"id":1207,"date":"2016-02-04T15:26:27","date_gmt":"2016-02-04T14:26:27","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=1207"},"modified":"2023-09-29T16:11:44","modified_gmt":"2023-09-29T14:11:44","slug":"docker-obraz-podstawowe-operacje","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/docker-obraz-podstawowe-operacje\/","title":{"rendered":"Docker: obraz, podstawowe operacje"},"content":{"rendered":"\n<p>Obraz to jedno z podstawowych poj\u0119\u0107 Dockera. Zrozumienie go stanowi punkt wyj\u015bcia do pracy z kontenerami. W tym wpisie zosta\u0142o zdefiniowanie poj\u0119cie obrazu oraz przedstawiono podstawowe operacje jakie mo\u017cna wykona\u0107 na obrazie.<\/p>\n\n\n\n<p><em>Ten wpis jest cz\u0119\u015bci\u0105 serii wpis\u00f3w o Dockerze. Je\u017celi jakie\u015b poj\u0119cie jest u\u017cywane bez wyja\u015bnienia to prawdopodobnie zosta\u0142o wprowadzone w jednym z wcze\u015bniejszych wpis\u00f3w.<\/em><\/p>\n\n\n\n<p>* Zach\u0119camy r\u00f3wnie\u017c do&nbsp;<strong>zapoznania si\u0119 z od\u015bwie\u017conymi w grudniu 2021 i styczniu 2022 artyku\u0142ami nt. Dockera<\/strong>, kt\u00f3re znajdziecie pod tym wpisem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wst\u0119p<\/h2>\n\n\n\n<p>Obraz jest ujednolicon\u0105&nbsp;kolekcj\u0105 warstw UFS (Union File System). Ka\u017cda warstwa jest wynikiem wykonania pewnej czynno\u015bci podczas tworzenia obrazu, np. instalacji pakietu, skopiowania danych, ustawienia zmiennej \u015brodowiskowej. Warstwy obrazu s\u0105 dost\u0119pne tylko do odczytu (Rys. 1).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/4.png\"><img decoding=\"async\" width=\"301\" height=\"496\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/4.png\" alt=\"Graficzna interpretacja obrazu.\" class=\"wp-image-1220\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/4.png 301w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/4-182x300.png 182w\" sizes=\"(max-width: 301px) 100vw, 301px\" \/><\/a><figcaption class=\"wp-element-caption\">Rys. 1. Graficzna interpretacja obrazu.<\/figcaption><\/figure>\n\n\n\n<p>Obraz stanowi podstaw\u0119 do stworzenia kontenera. Nawi\u0105zuj\u0105c do programowania obiektowego relacj\u0119 pomi\u0119dzy obrazem i&nbsp;kontenerem mo\u017cna por\u00f3wna\u0107 do relacji pomi\u0119dzy klas\u0105 i&nbsp;jej instancj\u0105.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pobieranie<\/h2>\n\n\n\n<p>Podstawowym \u017ar\u00f3d\u0142em obraz\u00f3w jest repozytorium obraz\u00f3w Dockera: <a href=\"https:\/\/hub.docker.com\/\" target=\"_blank\" rel=\"noopener\" rel=\"nofollow\" >docker hub<\/a>. W&nbsp;repozytorium znajduje si\u0119 wiele oficjalnych obraz\u00f3w, np. ubuntu, postgres, redis, node oraz nieoficjalne obrazy stworzone przez u\u017cytkownik\u00f3w Dockera.<\/p>\n\n\n\n<p>Obraz z&nbsp;repozytorium Dockera mo\u017cna pobra\u0107 za pomoc\u0105 polecenia:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker pull &#x5B;nazwa obrazu]\n<\/pre><\/div>\n\n\n<p>Wszystkie nazwy obraz\u00f3w zbudowane s\u0105 w formacie: <code>[nazwa repozytorium]:[tag]<\/code>. Sk\u0142adowa <code>[tag]<\/code> pozwala zidentyfikowa\u0107 konkretn\u0105 wersj\u0119 obrazu w&nbsp;repozytorium, np. <code>15.04<\/code>, <code>stable<\/code>. Sk\u0142adowa <code>[tag]<\/code> jest opcjonalna i&nbsp;w&nbsp;przypadku jej braku zostanie pobrana najnowsza wersja obrazu z&nbsp;repozytorium, kt\u00f3ra domy\u015blnie jest oznaczana tagiem <code>latest<\/code>. Nazwy obraz\u00f3w nieoficjalnych s\u0105 dodatkowo poprzedzone nazw\u0105 u\u017cytkownika, do kt\u00f3rego nale\u017cy repozytorium: <code>[nazwa u\u017cytkownika]\/[repozytorium]:[tag]<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker pull ubuntu:15.10\n<\/pre><\/div>\n\n\n<p>Je\u017celi obraz zosta\u0142 ju\u017c wcze\u015bniej pobrany wtedy Docker wykryje to i&nbsp;w&nbsp;razie potrzeby zaktualizuje go pobieraj\u0105c najnowsze warstwy. Je\u017celi obraz nie istnieje lokalnie wtedy Docker pobierze wszystkie jego warstwy.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nb3309467c75a: Pulling fs layer\n3d46f652aa89: Pulling fs layer\nb90ed059f9d0: Pulling fs layer\na427f0b2488f: Pulling fs layer\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Wy\u015bwietlanie<\/h2>\n\n\n\n<p>Wszystkie lokalnie dost\u0119pne obrazy mo\u017cna wy\u015bwietli\u0107 za pomoc\u0105 polecenia:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker images\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nREPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE\nubuntu              15.10               5eb72b199374        4 weeks ago         131.4 MB\nredis               latest              0643f0c7d17d        4 weeks ago         109.2 MB\npostgres            latest              b305a133422a        4 weeks ago         265.1 MB\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Historia<\/h2>\n\n\n\n<p>Ka\u017cdy obraz Dockera powstaje w&nbsp;wyniku wykonania szeregu polece\u0144. Ka\u017cde z&nbsp;tych polece\u0144 tworzy osobn\u0105 warstw\u0119 obrazu. List\u0119 wszystkich warstw sk\u0142adaj\u0105cych si\u0119 na obraz mo\u017cna wy\u015bwietli\u0107 za pomoc\u0105 polcenia:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker history &#x5B;id lub nazwa obrazu]\n<\/pre><\/div>\n\n\n<p>Zapoznanie si\u0119 z&nbsp;tym poleceniem mo\u017ce pom\u00f3c lepiej zrozumie\u0107 warstwow\u0105 natur\u0119 obraz\u00f3w i&nbsp;kontener\u00f3w Dockera. Poni\u017cej znajduje si\u0119 skr\u00f3cony wykaz warstw obrazu <code>postgres<\/code>. Wida\u0107 po nim, \u017ce ka\u017cda warstwa jest wynikiem wykonania jakiego\u015b polecenia, np. instalacji pakietu, stworzenia zmiennej \u015brodowiskowej, stworzenia katalogu.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\nIMAGE               CREATED             CREATED BY                                      SIZE\n&#x5B;...]                               \n11f38e247778        4 weeks ago         \/bin\/sh -c mkdir \/docker-entrypoint-initdb.d    0 B          \nf114dda4521b        4 weeks ago         \/bin\/sh -c ENV LANG=en_US.utf8                  0 B       \nc27cdb916a4a        4 weeks ago         \/bin\/sh -c apt-get update &amp;amp;&amp;amp; apt-get install    19.47 MB   \n&#x5B;...]\n<\/pre><\/div>\n\n\n<p>Polecenia tworz\u0105ce warstwy obrazu mo\u017cna te\u017c przejrze\u0107 czytaj\u0105c kod \u017ar\u00f3d\u0142owym obrazu. Plik z&nbsp;kodem \u017ar\u00f3d\u0142owym jest nazywany &#8222;Dockerfile&#8221;. Pliki \u017ar\u00f3d\u0142owe wszystkich obraz\u00f3w znajduj\u0105cych si\u0119 w&nbsp;repozytorium Dockera s\u0105 <a href=\"https:\/\/github.com\/docker-library\/postgres\/blob\/master\/9.5\/Dockerfile\" target=\"_blank\" rel=\"noopener\" rel=\"nofollow\" >publicznie dost\u0119pne<\/a>. Om\u00f3wienie sk\u0142adni plik\u00f3w \u017ar\u00f3d\u0142owych obraz\u00f3w jest tematem na osobny wpis i&nbsp;na tym etapie dobrze jest podej\u015b\u0107 do nich czysto pogl\u0105dowo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Usuwanie<\/h2>\n\n\n\n<p>Obraz mo\u017cna usun\u0105\u0107 za pomoc\u0105 polecenia:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker rmi &#x5B;nazwa lub id obrazu]\n<\/pre><\/div>\n\n\n<p>Docker nie dostarcza pojedynczego polecenia usuwaj\u0105cego wszystkie obrazy. Efekt ten mo\u017cna osi\u0105gn\u0105\u0107 poprzez z\u0142o\u017cenie dw\u00f3ch standardowych polece\u0144: znanego ju\u017c <code>docker rmi<\/code> oraz <code>docker images -q<\/code>, kt\u00f3re zwraca list\u0119 identyfikator\u00f3w wszystkich obraz\u00f3w.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; gutter: false; title: ; notranslate\" title=\"\">\ndocker rmi $(docker images -q)\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">* Zaktualizowane w 2021 i 2022 artyku\u0142y nt. Dockera<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-co-to-jest\/?category=development-na-twardo&amp;tag=devops,docker,kontener\" target=\"_blank\" rel=\"noopener\">Docker dla programist\u00f3w: co to jest?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-instalacja-i-budowanie-pierwszego-srodowiska\/?category=development-na-twardo&amp;tag=devops,docker,postgresql\" target=\"_blank\" rel=\"noopener\">Docker dla programist\u00f3w &#8211; budowa pierwszego \u015brodowiska. Cz\u0119\u015b\u0107 I<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-budowa-srodowiska-rozwojowego-cz-2\/?category=development-na-twardo&amp;tag=camunda,devops,docker\" target=\"_blank\" rel=\"noopener\">Docker dla programist\u00f3w &#8211; budowa \u015brodowiska rozwojowego. Cz\u0119\u015b\u0107 II<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/?category=development-na-twardo&amp;tag=devops,docker,docker-maven-plugin\" target=\"_blank\" rel=\"noopener\">Docker dla programist\u00f3w &#8211; dystrybucja aplikacji&nbsp;<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Spis wpis\u00f3w w serii<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-wprowadzenie\/?category=development-na-twardo&amp;tag=docker%2Ckontener%2Cwirtualna-maszyna&amp;preview_id=1172&amp;preview_nonce=b7f301b957&amp;preview=true&amp;_thumbnail_id=15403\" target=\"_blank\" rel=\"noopener\">Docker: wprowadzenie<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-obraz-podstawowe-operacje\/?category=development-na-twardo&amp;tag=docker,obraz\" target=\"_blank\" rel=\"noopener\" class=\"ek-link\">Obraz: podstawowe operacje <\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Kolejna seria post\u00f3w dost\u0119pna od 10.02.2016<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-polecenia\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\" data-wplink-edit=\"true\">Kontener: polecenia<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-strumienie-wewy-i-przegladanie-plikow\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">Kontener: strumienie we\/wy i przegl\u0105danie plik\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-udostepnianie-portow\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">Kontener: udost\u0119pnianie port\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-wspoldzielenie-plikow\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">Kontener: wsp\u00f3\u0142dzielenie plik\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sii.pl\/blog\/docker-kontener-zmienne-srodowiskowe\/?category=development-na-twardo&amp;tag=docker,kontener\" target=\"_blank\" rel=\"noopener\">Kontener: zmienne \u015brodowiskowe<\/a><\/li>\n<\/ul>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;1207&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;6&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.7&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;4.7\\\/5 ( votes: 6)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Docker: obraz, podstawowe operacje&quot;,&quot;width&quot;:&quot;130.8&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 130.8px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            4.7\/5 ( votes: 6)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Obraz to jedno z podstawowych poj\u0119\u0107 Dockera. Zrozumienie go stanowi punkt wyj\u015bcia do pracy z kontenerami. W tym wpisie zosta\u0142o &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/docker-obraz-podstawowe-operacje\/\">Continued<\/a><\/p>\n","protected":false},"author":61,"featured_media":15405,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":2,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[153,225],"class_list":["post-1207","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-docker","tag-obraz"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/02\/25_docker_2-1.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1207"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/61"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=1207"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1207\/revisions"}],"predecessor-version":[{"id":24591,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1207\/revisions\/24591"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/15405"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=1207"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=1207"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=1207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}