{"id":1151,"date":"2022-01-19T09:32:34","date_gmt":"2022-01-19T08:32:34","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=1151"},"modified":"2023-03-23T14:26:27","modified_gmt":"2023-03-23T13:26:27","slug":"docker-dla-programistow-dystrybucja-aplikacji-cz-3","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/","title":{"rendered":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji"},"content":{"rendered":"\n<p>W <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\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">ostatnim artykule\u00a0<\/a>zbudowali\u015bmy \u015brodowisko dla aplikacji uruchamianych na platformie Camunda BPM z wykorzystaniem PostgreSQL i serwera Wildfly. Do tej pory mogli\u015bmy uruchomi\u0107 aplikacj\u0119, startuj\u0105c kontener serwera Wildfly z zamontowanym modu\u0142em WAR, zawieraj\u0105cym nasz\u0105 przyk\u0142adow\u0105 aplikacj\u0119.<\/p>\n\n\n\n<p>Taki spos\u00f3b uruchomienia jest wygodny dla dewelopera, ale operator \u015brodowiska produkcyjnego raczej nie b\u0119dzie zadowolony. Docker pozwala na znacznie wygodniejsze przygotowanie paczki dystrybucyjnej pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105. Dzi\u0119ki temu, na \u015brodowisko produkcyjne mo\u017cna dostarczy\u0107 gotowy do uruchomienia kontener i znacznie ograniczy\u0107 ilo\u015b\u0107 krok\u00f3w koniecznych do wykonania przez administratora.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Instalacja aplikacji na serwerach<\/strong><\/h2>\n\n\n\n<p>Warto w tym miejscu na moment si\u0119 zatrzyma\u0107 i zwr\u00f3ci\u0107 uwag\u0119 na ciekaw\u0105 rzecz. W tradycyjnym podej\u015bciu do instalacji aplikacji na serwerach, ci\u0119\u017car zwi\u0105zany z technikaliami spada na administrator\u00f3w lub operator\u00f3w docelowego \u015brodowiska.<\/p>\n\n\n\n<p>To znaczy, \u017ce inaczej wdra\u017ca si\u0119 aplikacje pisane w Javie, inaczej w .NET, a jeszcze inaczej w Pythonie lub Ruby. Wynika to, jak wiemy, z ogromnych r\u00f3\u017cnic pomi\u0119dzy tymi platformami i wbudowanymi w nie mechanizmami dystrybucji i uruchomienia paczek. Powoduje to cz\u0119sto problemy i trudno\u015bci a przede wszystkim opory przed nowymi technologiami wdra\u017canymi w organizacji, poniewa\u017c nie tylko deweloperzy, ale r\u00f3wnie\u017c administratorzy, musz\u0105 by\u0107 na bie\u017c\u0105co z nowo\u015bciami, aby skutecznie instalowa\u0107 aplikacje.<\/p>\n\n\n\n<p>Docker wspiera zaanga\u017cowanie deweloper\u00f3w w proces uruchamiania aplikacji na kolejnych \u015brodowiskach oraz (na sw\u00f3j spos\u00f3b) eliminuje ryzyko zwi\u0105zane z brakiem znajomo\u015bci technologii w zespole OPS. To w\u0142a\u015bnie deweloperzy dokonuj\u0105 niejako instalacji aplikacji po swojej stronie i dostarczaj\u0105 operatorom obrazy kontener\u00f3w z zainstalowan\u0105 aplikacj\u0105.<\/p>\n\n\n\n<p>Jest to spos\u00f3b na zrealizowanie zasady m\u00f3wi\u0105cej o hermetyzowaniu zmienno\u015bci: zmiana technologii jest ukryta i zamkni\u0119ta w obszarze developmentu, a operatorzy pos\u0142uguj\u0105 si\u0119 niezmienn\u0105 technologi\u0105, czyli Dockerem.<\/p>\n\n\n\n<p>Wracaj\u0105c do budowania obrazu naszego kontenera z aplikacj\u0105 BPM, warto jeszcze zauwa\u017cy\u0107, \u017ce o ile z punktu widzenia administrator\u00f3w technologia wykonania aplikacji staje si\u0119 mniej znacz\u0105cym elementem, to deweloperzy musz\u0105 dostosowa\u0107 swoje aplikacje tak, aby da\u0142o si\u0119 je prosto zapakowa\u0107 w kontener Dockera.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Jak przygotowa\u0107 obraz na produkcj\u0119?<\/strong><\/h2>\n\n\n\n<p>Na pocz\u0105tku chcia\u0142bym skupi\u0107 si\u0119 na mo\u017cliwie prostym podej\u015bciu do przygotowania obrazu wykorzystywanego na kolejnych \u015brodowiskach. Nast\u0119pnie, mam nadziej\u0119, zach\u0119ci\u0107 do poszerzania wiedzy i stosowania dobrych praktyk.<\/p>\n\n\n\n<p>W <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\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">poprzednim artykule<\/a> przygotowali\u015bmy plik docker-compose.yml, dzi\u0119ki kt\u00f3remu po uruchomieniu mieli\u015bmy dzia\u0142aj\u0105c\u0105 aplikacj\u0119. Z punktu widzenia programisty by\u0142o to wygodne \u2013 aplikacja uruchomiona wraz z potrzebnymi zale\u017cno\u015bciami. Jednak uruchamianie w ten spos\u00f3b na kolejnych \u015brodowiskach jest oczywi\u015bcie karko\u0142omne. Mo\u017cna by zapyta\u0107: gdzie ten kompletny obraz dla kontenera\u2026?<\/p>\n\n\n\n<p>Kr\u00f3tko odpowiadaj\u0105c, a jednocze\u015bnie nawi\u0105zuj\u0105c <a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-co-to-jest\/?category=development-na-twardo&amp;tag=devops,docker,kontener\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">do pierwszego z serii artyku\u0142u:<\/a><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n# Dockerfile\nFROM camunda\/camunda-bpm-platform:wildfly-7.16.0\nCOPY .\/target\/pizza-order.war \/camunda\/standalone\/deployments\/pizza-order.war\n<\/pre><\/div>\n\n\n<p>Budowanie obrazu:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ docker build . -t someorganization\/pizza-order:1.0\n<\/pre><\/div>\n\n\n<p>Plik Dockerfile jest plikiem, kt\u00f3ry zawiera polecenia do zbudowania obrazu.<\/p>\n\n\n\n<p>Prostym i przejrzystym opisem wspomnianego pliku jest <a href=\"https:\/\/docs.docker.com\/engine\/reference\/builder\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >strona z\u00a0 dokumentacj\u0105<\/a>. Zach\u0119cam r\u00f3wnie\u017c do zapoznania si\u0119 <a href=\"https:\/\/docs.docker.com\/develop\/develop-images\/dockerfile_best-practices\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >z dobrymi praktykami tworzenia obraz\u00f3w<\/a>.<br>Polecenie build wykonuje instrukcje zawarte w pilku Dockerfile. Parametr . (kropka) oznacza bie\u017c\u0105cy katalog, a przez -t przekazuje si\u0119 nazw\u0119 taga, pod jakim obraz b\u0119dzie dost\u0119pny.<\/p>\n\n\n\n<p>\u00a0Po wykonaniu powy\u017cszego polecenia powinni\u015bmy otrzyma\u0107 nowy obraz, oczekiwany wynik:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ docker images someorganization\/pizza-order\nREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE\nsomeorganization\/pizza-order         1.0                 18105f66f15e        2 minutes ago       527MB\n<\/pre><\/div>\n\n\n<p>Dla podanej nazwy repozytorium \u201csomeorganization\/pizza-order\u201d otrzymujemy wcze\u015bniej utworzonego taga 1.0.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Rejestr obraz\u00f3w<\/strong><\/h2>\n\n\n\n<p>Co dalej? Zbudowany obraz trzeba udost\u0119pni\u0107. W <a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-co-to-jest\/?category=development-na-twardo&amp;tag=devops,docker,kontener\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">pierwszej cze\u015bci\u00a0<\/a>zapoznali\u015bmy si\u0119 z dwiema metodami udost\u0119pniania.<\/p>\n\n\n\n<p>Dzisiaj skupimy si\u0119 na rejestrze obraz\u00f3w \u2013 najbardziej popularnym jest <a href=\"https:\/\/hub.docker.com\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Docker Hub<\/a>. Rejestr mo\u017ce by\u0107 publicznie dost\u0119pny lub prywatny. Wyb\u00f3r jest tutaj szczeg\u00f3lnie wa\u017cny \u2013 nie zawsze chcemy udost\u0119pnia\u0107 ca\u0142emu \u015bwiatu aplikacj\u0119, kt\u00f3r\u0105 piszemy dla klienta.<\/p>\n\n\n\n<p>Spos\u00f3b korzystania z obu dost\u0119p\u00f3w jest podobny, dodanie lub aktualizacja obrazu wymaga logowania do rejestru. Jedynie w przypadku prywatnego rejestru trzeba zalogowa\u0107 si\u0119 przed pobraniem obrazu. Poni\u017csze polecenie loguje do wspomnianego rejestru (uprzednio <a href=\"https:\/\/hub.docker.com\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >nale\u017cy za\u0142o\u017cy\u0107 konto<\/a>):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ docker login\n<\/pre><\/div>\n\n\n<p>Wykonuj\u0105c poni\u017csze polecenie, wysy\u0142amy obraz do rejestru:\u00a0<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ docker push someorganization\/pizza-order:1.0\n<\/pre><\/div>\n\n\n<p>Nast\u0119pnie, aby u\u017cy\u0107 obraz na produkcji albo dowolnym innym \u015brodowisku, pobieramy go przez znane nam ju\u017c polecenie:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ docker pull someorganization\/pizza-order:1.0\n<\/pre><\/div>\n\n\n<p>Dzi\u0119ki powy\u017cszemu uzyskali\u015bmy obraz z aplikacj\u0105. Jednak w tym miejscu nale\u017cy zrobi\u0107 pauz\u0119. Gdzie\u015b \u201ezgubi\u0142 si\u0119\u201d postgres i co sta\u0142o si\u0119 z docker-compose.yml \u2013 czy jego te\u017c trzeba dostarczy\u0107 na kolejne \u015brodowiska?<\/p>\n\n\n\n<p>Docker compose nadaje si\u0119 do lokalnej pracy z obrazami, jednak uruchamianie kontener\u00f3w na kolejnych \u015brodowiskach to zadanie dla bardziej wyspecjalizowanych narz\u0119dzi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Orkiestracja kontener\u00f3w<\/strong><\/h2>\n\n\n\n<p>W naszej przyk\u0142adowej aplikacji potrzebujemy do dzia\u0142ania przynajmniej dw\u00f3ch kontener\u00f3w \u2013 pierwszy z aplikacj\u0105, drugi z baz\u0105 danych. Co, je\u015bli jeden kontener z aplikacj\u0105 to za ma\u0142o i potrzebnych jest ich kilka?\u00a0<\/p>\n\n\n\n<p>Tutaj w\u0142a\u015bnie pojawiaj\u0105 si\u0119 narz\u0119dzia umo\u017cliwiaj\u0105ce orkiestracj\u0119, ci\u0105g\u0142\u0105 dost\u0119pno\u015b\u0107 oraz \u0142atwe wdra\u017canie aplikacji. Przyk\u0142adami s\u0105 Kubernetes, OpenShift, Azure AKS czy AWS ECS \u2013 s\u0105 to kompleksowe rozwi\u0105zania, kt\u00f3re wychodz\u0105 daleko poza prosty docker compose.<\/p>\n\n\n\n<p>Opisanie tych technologii wykracza poza zakres tego artyku\u0142u, jednak my\u015bl\u0105c powa\u017cnie o dystrybuowaniu swojej aplikacji, zdecydowanie nale\u017cy wzi\u0105\u0107 je pod uwag\u0119, maj\u0105c ju\u017c gotowy obraz \u2013 zbudowany w przedstawiony spos\u00f3b \ud83d\ude42<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Kubernetes<\/strong><\/h2>\n\n\n\n<p>Wspomn\u0119 tylko kr\u00f3tko o Kubernetes. Jest jednym z bardziej popularnych narz\u0119dzi, opisuj\u0105c <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Kubernetes\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >za Wikipedi\u0105<\/a>: \u201eKubernetes to otwarto\u017ar\u00f3d\u0142owa platforma do zarz\u0105dzania, automatyzacji i skalowania aplikacji kontenerowych. Jego pierwotna wersja zosta\u0142a stworzona w 2014 roku przez Google, a obecnie rozwijany jest przez Cloud Native Computing Foundation\u201d.<\/p>\n\n\n\n<p>Na naszym blogu znajduje si\u0119 <a href=\"https:\/\/sii.pl\/blog\/en\/introduction-to-kubernetes-k8s\/?category=hard-development&amp;tag=k8s-en,kubernetes-en,minikube-en,software-development-2\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">artyku\u0142 stanowi\u0105cy wprowadzenie do tej technologii.<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Poznali\u015bmy wcze\u015bniej Docker compose, kt\u00f3ry nadaje si\u0119 do lokalnej pracy. W tym artykule przedstawi\u0142em prosty spos\u00f3b budowania obrazu dla kolejnych \u015brodowisk, \u0142\u0105cznie ze \u015brodowiskiem produkcyjnym.<\/p>\n\n\n\n<p>Ca\u0142y ten proces budowania obrazu powinien by\u0107 zautomatyzowany i w po\u0142\u0105czeniu z praktykami Continous Integration, Continous Developement lub Continous Delivery stanowi\u0107 spos\u00f3b na wdra\u017canie naszych aplikacji.<\/p>\n\n\n\n<p>Na koniec jeszcze ma\u0142e s\u0142owo wyja\u015bnienia. Buduj\u0105c obraz, pos\u0142u\u017cy\u0142em si\u0119 bezpo\u015brednim wykorzystaniem polecenia \u201edocker build\u201d. Istniej\u0105 te\u017c inne rozwi\u0105zania, kt\u00f3re wspomagaj\u0105 ten proces (np.: <a aria-label=\" (opens in a new tab)\" href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fgithub.com%2Fopenshift%2Fsource-to-image&amp;data=04%7C01%7Cdbaldyga%40sii.pl%7C440319979cf74857157308d9d9f55020%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C637780469901357281%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=YmCgt2cWve6xveTrSkkvtiRXaO3WfEsk%2Fz7KvrSdRgc%3D&amp;reserved=0\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >S2I<\/a>, <a aria-label=\" (opens in a new tab)\" href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fgithub.com%2Feclipse%2Fjkube%2Ftree%2Fmaster%2Fkubernetes-maven-plugin&amp;data=04%7C01%7Cdbaldyga%40sii.pl%7C440319979cf74857157308d9d9f55020%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C637780469901357281%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=BQrf9l4ToFcxupl%2FNQk0gWsM20OVl1OHwZ6TGIfB2cI%3D&amp;reserved=0\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >kubernetes maven plugin<\/a>). Jednak celowo o nich nie wspomnia\u0142em,\u00a0poniewa\u017c dodaj\u0105 dodatkow\u0105 warstw\u0119 abstrakcji do projektu i takie wybory powinny by\u0107 \u015bwiadome po poznaniu podstaw.<\/p>\n\n\n\n<p>Dodatkowo, trzymaj\u0105c si\u0119 regu\u0142y <a href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fpl.wikipedia.org%2Fwiki%2FKISS_(regu%25C5%2582a)&amp;data=04%7C01%7Cdbaldyga%40sii.pl%7C440319979cf74857157308d9d9f55020%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C637780469901357281%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=Z2JpbRRTE7hvIjQRSUsUNGT4VETdQxwgc%2BsoSSfvMuI%3D&amp;reserved=0\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >KISS<\/a>\u00a0(ang. Keep It Simple, Stupid) nasz proces powinien by\u0107 mo\u017cliwie prosty.\u00a0Dzi\u0119ki temu \u0142atwiej jest go zautomatyzowa\u0107 \ud83d\ude42<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p><strong>Zaktualizowane w 2021 i 2022 artyku\u0142y nt. Dockera<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><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=\"noreferrer noopener\" class=\"ek-link\">Docker dla programist\u00f3w: co to jest?<\/a><\/li><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=\"noreferrer noopener\">Docker dla programist\u00f3w \u2013 budowa pierwszego \u015brodowiska. Cz\u0119\u015b\u0107 I<\/a><\/li><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=\"noreferrer noopener\">Docker dla programist\u00f3w \u2013 budowa \u015brodowiska rozwojowego. Cz\u0119\u015b\u0107 II<\/a><\/li><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=\"noreferrer noopener\">Docker dla programist\u00f3w \u2013 dystrybucja aplikacji\u00a0<\/a><\/li><\/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;1151&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;10&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;Docker dla programist\u00f3w \u2013 dystrybucja aplikacji&quot;,&quot;width&quot;:&quot;159&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&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: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 159px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            5\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>W ostatnim artykule\u00a0zbudowali\u015bmy \u015brodowisko dla aplikacji uruchamianych na platformie Camunda BPM z wykorzystaniem PostgreSQL i serwera Wildfly. Do tej pory &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/\">Continued<\/a><\/p>\n","protected":false},"author":324,"featured_media":1884,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":4,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[154,153],"class_list":["post-1151","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-devops","tag-docker"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"Docker pozwala przygotowa\u0107 paczk\u0119 dystrybucyjn\u0105 pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105 i dostarczy\u0107 gotowy do uruchomienia kontener\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Dawid Szulist\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"blogersii\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji\" \/>\n\t\t<meta property=\"og:description\" content=\"Docker pozwala przygotowa\u0107 paczk\u0119 dystrybucyjn\u0105 pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105 i dostarczy\u0107 gotowy do uruchomienia kontener\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker_wot.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker_wot.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2022-01-19T08:32:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2023-03-23T13:26:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Sii.Polska\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Docker pozwala przygotowa\u0107 paczk\u0119 dystrybucyjn\u0105 pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105 i dostarczy\u0107 gotowy do uruchomienia kontener\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker_wot.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#article\",\"name\":\"Docker dla programist\\u00f3w \\u2013 dystrybucja aplikacji\",\"description\":\"Docker pozwala przygotowa\\u0107 paczk\\u0119 dystrybucyjn\\u0105 pod postaci\\u0105 obrazu kontenera z zainstalowan\\u0105 w nim aplikacj\\u0105 i dostarczy\\u0107 gotowy do uruchomienia kontener\",\"inLanguage\":\"pl-PL\",\"headline\":\"Docker dla programist\\u00f3w \\u2013 dystrybucja aplikacji\",\"author\":{\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/author\\\/dawid-szulist\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/sii.pl\\\/#organization\"},\"datePublished\":\"2022-01-19T08:32:34+01:00\",\"dateModified\":\"2023-03-23T13:26:27+01:00\",\"articleSection\":\"Development na twardo, DevOps, Docker\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#webpage\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/12\\\/docker_wot.jpg\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#articleImage\",\"width\":1024,\"height\":540}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sii.pl\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/development-na-twardo\\\/#listItem\",\"name\":\"Development na twardo\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/development-na-twardo\\\/#listItem\",\"position\":2,\"name\":\"Development na twardo\",\"item\":\"https:\\\/\\\/sii.pl\\\/blog\\\/development-na-twardo\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#listItem\",\"name\":\"Docker dla programist\\u00f3w \\u2013 dystrybucja aplikacji\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#listItem\",\"position\":3,\"name\":\"Docker dla programist\\u00f3w \\u2013 dystrybucja aplikacji\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/development-na-twardo\\\/#listItem\",\"name\":\"Development na twardo\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sii.pl\\\/#organization\",\"name\":\"Sii Polska\",\"url\":\"https:\\\/\\\/sii.pl\\\/blog\\\/\",\"sameAs\":[\"https:\\\/\\\/www.instagram.com\\\/siipolska\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@siipolska\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCQ3UQ7RJPEYnAWC_rPE5Dxg\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/sii-polska\",\"https:\\\/\\\/clutch.co\\\/profile\\\/sii-poland\",\"https:\\\/\\\/www.crunchbase.com\\\/organization\\\/sii\",\"https:\\\/\\\/www.wikidata.org\\\/wiki\\\/Q16601096\"]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#webpage\",\"url\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/\",\"name\":\"Docker dla programist\\u00f3w \\u2013 dystrybucja aplikacji\",\"description\":\"Docker pozwala przygotowa\\u0107 paczk\\u0119 dystrybucyjn\\u0105 pod postaci\\u0105 obrazu kontenera z zainstalowan\\u0105 w nim aplikacj\\u0105 i dostarczy\\u0107 gotowy do uruchomienia kontener\",\"inLanguage\":\"pl-PL\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#breadcrumblist\"},\"author\":\"https:\\\/\\\/sii.pl\\\/blog\\\/author\\\/dawid-szulist\\\/#author\",\"creator\":\"https:\\\/\\\/sii.pl\\\/blog\\\/author\\\/dawid-szulist\\\/#author\",\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/12\\\/docker_wot.jpg\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#mainImage\",\"width\":1024,\"height\":540},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\\\/#mainImage\"},\"datePublished\":\"2022-01-19T08:32:34+01:00\",\"dateModified\":\"2023-03-23T13:26:27+01:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sii.pl\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/sii.pl\\\/blog\\\/\",\"name\":\"blogersii\",\"description\":\"Blog technologiczny Sii \\u2013 praktyczna wiedza od ekspert\\u00f3w\",\"inLanguage\":\"pl-PL\",\"publisher\":{\"@id\":\"https:\\\/\\\/sii.pl\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji","description":"Docker pozwala przygotowa\u0107 paczk\u0119 dystrybucyjn\u0105 pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105 i dostarczy\u0107 gotowy do uruchomienia kontener","canonical_url":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#article","name":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji","description":"Docker pozwala przygotowa\u0107 paczk\u0119 dystrybucyjn\u0105 pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105 i dostarczy\u0107 gotowy do uruchomienia kontener","inLanguage":"pl-PL","headline":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji","author":{"@id":"https:\/\/sii.pl\/blog\/author\/dawid-szulist\/#author"},"publisher":{"@id":"https:\/\/sii.pl\/#organization"},"datePublished":"2022-01-19T08:32:34+01:00","dateModified":"2023-03-23T13:26:27+01:00","articleSection":"Development na twardo, DevOps, Docker","mainEntityOfPage":{"@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#webpage"},"isPartOf":{"@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#webpage"},"image":{"@type":"ImageObject","url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker_wot.jpg","@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#articleImage","width":1024,"height":540}},{"@type":"BreadcrumbList","@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/sii.pl\/blog#listItem","position":1,"name":"Home","item":"https:\/\/sii.pl\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/sii.pl\/blog\/development-na-twardo\/#listItem","name":"Development na twardo"}},{"@type":"ListItem","@id":"https:\/\/sii.pl\/blog\/development-na-twardo\/#listItem","position":2,"name":"Development na twardo","item":"https:\/\/sii.pl\/blog\/development-na-twardo\/","nextItem":{"@type":"ListItem","@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#listItem","name":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji"},"previousItem":{"@type":"ListItem","@id":"https:\/\/sii.pl\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#listItem","position":3,"name":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji","previousItem":{"@type":"ListItem","@id":"https:\/\/sii.pl\/blog\/development-na-twardo\/#listItem","name":"Development na twardo"}}]},{"@type":"Organization","@id":"https:\/\/sii.pl\/#organization","name":"Sii Polska","url":"https:\/\/sii.pl\/blog\/","sameAs":["https:\/\/www.instagram.com\/siipolska\/","https:\/\/www.tiktok.com\/@siipolska","https:\/\/www.youtube.com\/channel\/UCQ3UQ7RJPEYnAWC_rPE5Dxg","https:\/\/www.linkedin.com\/company\/sii-polska","https:\/\/clutch.co\/profile\/sii-poland","https:\/\/www.crunchbase.com\/organization\/sii","https:\/\/www.wikidata.org\/wiki\/Q16601096"]},{"@type":"WebPage","@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#webpage","url":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/","name":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji","description":"Docker pozwala przygotowa\u0107 paczk\u0119 dystrybucyjn\u0105 pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105 i dostarczy\u0107 gotowy do uruchomienia kontener","inLanguage":"pl-PL","isPartOf":{"@id":"https:\/\/sii.pl\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#breadcrumblist"},"author":"https:\/\/sii.pl\/blog\/author\/dawid-szulist\/#author","creator":"https:\/\/sii.pl\/blog\/author\/dawid-szulist\/#author","image":{"@type":"ImageObject","url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker_wot.jpg","@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#mainImage","width":1024,"height":540},"primaryImageOfPage":{"@id":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/#mainImage"},"datePublished":"2022-01-19T08:32:34+01:00","dateModified":"2023-03-23T13:26:27+01:00"},{"@type":"WebSite","@id":"https:\/\/sii.pl\/blog\/#website","url":"https:\/\/sii.pl\/blog\/","name":"blogersii","description":"Blog technologiczny Sii \u2013 praktyczna wiedza od ekspert\u00f3w","inLanguage":"pl-PL","publisher":{"@id":"https:\/\/sii.pl\/#organization"}}]},"og:locale":"pl_PL","og:site_name":"blogersii","og:type":"article","og:title":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji","og:description":"Docker pozwala przygotowa\u0107 paczk\u0119 dystrybucyjn\u0105 pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105 i dostarczy\u0107 gotowy do uruchomienia kontener","og:url":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/","og:image":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker_wot.jpg","og:image:secure_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker_wot.jpg","og:image:width":1024,"og:image:height":540,"article:published_time":"2022-01-19T08:32:34+00:00","article:modified_time":"2023-03-23T13:26:27+00:00","article:publisher":"https:\/\/www.facebook.com\/Sii.Polska","twitter:card":"summary","twitter:title":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji","twitter:description":"Docker pozwala przygotowa\u0107 paczk\u0119 dystrybucyjn\u0105 pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105 i dostarczy\u0107 gotowy do uruchomienia kontener","twitter:image":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker_wot.jpg"},"aioseo_meta_data":{"post_id":"1151","title":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji","description":"Docker pozwala przygotowa\u0107 paczk\u0119 dystrybucyjn\u0105 pod postaci\u0105 obrazu kontenera z zainstalowan\u0105 w nim aplikacj\u0105 i dostarczy\u0107 gotowy do uruchomienia kontener","keywords":[],"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"article","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":"","og_custom_url":null,"og_article_section":null,"og_article_tags":[],"twitter_use_og":false,"twitter_card":"summary","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":{"id":"#aioseo-article-64670f4dc354a","slug":"article","graphName":"Article","label":"Article","properties":{"type":"BlogPosting","name":"#post_title","headline":"#post_title","description":"#post_excerpt","image":"","keywords":"","author":{"name":"#author_name","url":"#author_url"},"dates":{"include":true,"datePublished":"","dateModified":""}}},"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":"{\"article\":{\"articleType\":\"BlogPosting\"},\"course\":{\"name\":\"\",\"description\":\"\",\"provider\":\"\"},\"faq\":{\"pages\":[]},\"product\":{\"reviews\":[]},\"recipe\":{\"ingredients\":[],\"instructions\":[],\"keywords\":[]},\"software\":{\"reviews\":[],\"operatingSystems\":[]},\"webPage\":{\"webPageType\":\"WebPage\"}}","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":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"limit_modified_date":false,"created":"2021-10-15 05:17:44","updated":"2023-05-19 05:55:25","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/sii.pl\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/sii.pl\/blog\/development-na-twardo\/\" title=\"Development na twardo\">Development na twardo<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tDocker dla programist\u00f3w \u2013 dystrybucja aplikacji\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/sii.pl\/blog"},{"label":"Development na twardo","link":"https:\/\/sii.pl\/blog\/development-na-twardo\/"},{"label":"Docker dla programist\u00f3w \u2013 dystrybucja aplikacji","link":"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/"}],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker_wot.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1151","targetHints":{"allow":["GET"]}}],"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\/324"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=1151"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1151\/revisions"}],"predecessor-version":[{"id":20508,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1151\/revisions\/20508"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/1884"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=1151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=1151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=1151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}