{"id":1023,"date":"2024-05-28T08:00:00","date_gmt":"2024-05-28T06:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=1023"},"modified":"2024-12-05T09:51:47","modified_gmt":"2024-12-05T08:51:47","slug":"docker-dla-programistow-co-to-jest","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/docker-dla-programistow-co-to-jest\/","title":{"rendered":"Docker dla programist\u00f3w, co to jest?"},"content":{"rendered":"\n<p><a href=\"https:\/\/docker.com\/\" rel=\"nofollow\" >Docker<\/a> to obecnie niezb\u0119dne narz\u0119dzie dla wi\u0119kszo\u015bci programist\u00f3w. Wed\u0142ug <a aria-label=\"bada\u0144 Stack Overflow (opens in a new tab)\" href=\"https:\/\/survey.stackoverflow.co\/2023\/\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >bada\u0144 Stack Overflow<\/a>, Docker jest technologi\u0105, kt\u00f3rej znajomo\u015b\u0107 jest najbardziej po\u017c\u0105dana przez developer\u00f3w.<\/p>\n\n\n\n<p>Znajomo\u015b\u0107 Dockera przydaje si\u0119 w wielu rozwi\u0105zaniach chmurowych m.in.:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kubernetes,<\/li>\n\n\n\n<li>Azure App Services,<\/li>\n\n\n\n<li>Amazon Elastic Container Service.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/05\/1-1.jpg\"><img decoding=\"async\" width=\"1024\" height=\"814\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/05\/1-1-1024x814.jpg\" alt=\"Najbardziej po\u017c\u0105dane technologie zdaniem programist\u00f3w w 2023\" class=\"wp-image-27803\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/05\/1-1-1024x814.jpg 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/05\/1-1-300x238.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/05\/1-1-768x610.jpg 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/05\/1-1.jpg 1189w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 <a href=\"https:\/\/survey.stackoverflow.co\/2023\/\" target=\"_blank\" aria-label=\"Najbardziej po\u017c\u0105dane technologie zdaniem programist\u00f3w w 2023 (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >Najbardziej po\u017c\u0105dane technologie zdaniem programist\u00f3w w 2023<\/a><\/figcaption><\/figure>\n\n\n\n<p>I w\u0142a\u015bnie z tego powodu w <a href=\"https:\/\/sii.pl\/blog\/wyszukiwarka\/szulist\/\" target=\"_blank\" aria-label=\"serii artyku\u0142\u00f3w (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">serii artyku\u0142\u00f3w<\/a> przybli\u017c\u0119 Wam to narz\u0119dzie. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Docker \u2013 czym jest i w jaki spos\u00f3b mog\u0105 go wykorzysta\u0107 programi\u015bci?<\/strong><\/h2>\n\n\n\n<p>Aby m\u00f3c wykorzysta\u0107 potencja\u0142 narz\u0119dzia, warto je dobrze pozna\u0107. Odpowiedzmy sobie najpierw na pytanie, czym w\u0142a\u015bciwie jest Docker, kontener i obrazy, u\u017cywane przez kontenery.<\/p>\n\n\n\n<p>Docker jest obecnie jednym z kilku narz\u0119dzi, kt\u00f3re <strong>uruchamiaj\u0105 kontenery<\/strong>. Inne narz\u0119dzia o tej samej funkcji to np.: Containerd lub CRI-O. Dzi\u0119ki kontenerom mo\u017cemy aktywowa\u0107 dodatkowy, odizolowany system operacyjny z gotow\u0105 do dzia\u0142ania aplikacj\u0105. Kontener nie emuluje ca\u0142ej warstwy sprz\u0119towej \u2013 dzi\u0119ki niemu otrzymujemy pe\u0142noprawny system operacyjny wraz ze zdefiniowanym procesem aplikacji. Nie zu\u017cywa te\u017c takiej ilo\u015bci zasob\u00f3w, co wirtualizacja.<\/p>\n\n\n\n<p><strong>Kontenery Dockera dzia\u0142aj\u0105 niezale\u017cnie od siebie<\/strong> i do chwili, w kt\u00f3rej \u015bwiadomie wska\u017cemy zale\u017cno\u015b\u0107 pomi\u0119dzy nimi, nic o sobie nie wiedz\u0105. Je\u015bli, przyk\u0142adowo, chcemy uruchomi\u0107 baz\u0119 danych dla naszej aplikacji, to istnieje taka mo\u017cliwo\u015b\u0107. Polega ona na uruchomieniu kolejnego kontenera z baz\u0105 i stworzeniu po\u0142\u0105czenia sieciowego pomi\u0119dzy kontenerami.<\/p>\n\n\n\n<p>W dokumentacji Dockera cz\u0119sto wymieniane jest okre\u015blenie \u201econtainer image\u201d. Podkre\u015bla ono zale\u017cno\u015b\u0107 \u2013 <strong>kontener powstaje na podstawie obrazu<\/strong>.<\/p>\n\n\n\n<p>Obraz kontenera to lekki, samodzielny, wykonywalny pakiet oprogramowania, kt\u00f3ry zawiera wszystko, co jest potrzebne do uruchomienia aplikacji:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>kod,<\/li>\n\n\n\n<li>\u015brodowisko wykonawcze,<\/li>\n\n\n\n<li>narz\u0119dzia systemowe,<\/li>\n\n\n\n<li>biblioteki systemowe,<\/li>\n\n\n\n<li>ustawienia.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/szkolenia\/oferta\/docker-podstawy-budowa-obrazow-definiowanie\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"737\" height=\"170\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/12\/szkolenia-10.jpg\" alt=\"ofeta szkole\u0144\" class=\"wp-image-29770\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/12\/szkolenia-10.jpg 737w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/12\/szkolenia-10-300x69.jpg 300w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Uruchamianie i budowanie kontener\u00f3w<\/strong><\/h3>\n\n\n\n<p>Poni\u017cej przedstawi\u0119 kilka przyk\u0142adowych polece\u0144, kt\u00f3re uruchamiaj\u0105 i buduj\u0105 kontenery. W kolejnych artyku\u0142ach je rozwin\u0119.<\/p>\n\n\n\n<p><strong>Uruchamianie kontenera:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uruchomienie ubuntu z pow\u0142ok\u0105 bash<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker run -it ubuntu:22.04 bash\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Uruchomienie centos z pow\u0142ok\u0105 bash<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker run -it centos:centos8.4.2105 bash\n<\/pre><\/div>\n\n\n<p>Uruchomienie kontenera polega na wskazaniu obrazu, na podstawie kt\u00f3rego ma dzia\u0142a\u0107, i podaniu opcjonalnej konfiguracji. Powy\u017csze polecenia uruchamiaj\u0105 systemy operacyjne w wybranej wersji. Wywo\u0142anie pow\u0142oki bash uruchamia proces o tej nazwie w kontenerze i umo\u017cliwia wykonywanie w nim polece\u0144.<\/p>\n\n\n\n<p><strong>Budowanie obrazu kontenera<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zawarto\u015b\u0107 pliku Dockerfile<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nFROM tomcat:8.0\nADD https:\/\/tomcat.apache.org\/tomcat-7.0-doc\/appdev\/sample\/sample.war \/usr\/local\/tomcat\/webapps\/\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Budowanie obrazu<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker build -t sample-app-tomcat-1.0.0 .\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Uruchomienie lokalnego obrazu z udost\u0119pnieniem portu 8080<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker run -p 8080:8080 sample-app-tomcat-1.0.0:latest\n<\/pre><\/div>\n\n\n<p>Budowanie obrazu to zapisanie stanu kontenera w formie pliku. W podanym przyk\u0142adzie, na podstawie bazowego obrazu Tomcat, powstaje obraz z przyk\u0142adow\u0105 aplikacj\u0105&nbsp;<em>sample.war.<\/em> W ten spos\u00f3b otrzymujemy obraz gotowy do uruchomienia z powtarzaln\u0105 konfiguracj\u0105, wskazanymi wersjami oprogramowania \u2013 gotowy do dzia\u0142ania.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Wsp\u00f3\u0142dzielenie obrazu kontenera<\/strong><\/h3>\n\n\n\n<p>Aby wsp\u00f3\u0142dzieli\u0107 obraz i m\u00f3c uruchomi\u0107 go na kolejnych \u015brodowiskach, mamy dwie mo\u017cliwo\u015bci:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zapisanie obrazu w postaci pliku tarball,<\/li>\n\n\n\n<li>zapisanie obrazu w publicznym lub prywatnym rejestrze obraz\u00f3w.<\/li>\n<\/ul>\n\n\n\n<p>Pierwszy spos\u00f3b wykorzystuje si\u0119, kiedy docelowe \u015brodowiska nie maj\u0105 dost\u0119pu do Internetu. Natomiast najpowszechniejszym sposobem jest wykorzystanie rejestru.<\/p>\n\n\n\n<p>Do publicznego rejestru ka\u017cdy mo\u017ce dodawa\u0107 obrazy \u2013 co jest jednocze\u015bnie jego zalet\u0105 i wad\u0105. Dost\u0119pne, oficjalne obrazy budowane przez opiekun\u00f3w oraz tw\u00f3rc\u00f3w konkretnych rozwi\u0105za\u0144, s\u0105 bezpieczniejsze od obraz\u00f3w utworzonych przez prywatne osoby.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Jakie s\u0105 korzy\u015bci wykorzystania Dockera dla programist\u00f3w?<\/strong><\/h2>\n\n\n\n<p>Konteneryzacja dla programisty oznacza spos\u00f3b, w jaki mo\u017ce dostarczy\u0107 aplikacj\u0119 ze wszystkimi potrzebnymi zale\u017cno\u015bciami i wybranym systemem operacyjnym. Co wa\u017cne, mo\u017ce zrobi\u0107 to w okre\u015blonych przez niego wersjach, dzi\u0119ki czemu uruchomienie aplikacji na kolejnych \u015brodowiskach (w\u0142\u0105czaj\u0105c produkcyjne) jest bardziej przewidywalne.<\/p>\n\n\n\n<p>Przyk\u0142adowo: je\u015bli uruchamiamy aplikacj\u0119 Java na Apache Tomcat, to obraz kontenera zawiera zainstalowany system operacyjny (np. Ubuntu lub CentOS), zainstalowan\u0105 maszyn\u0119 Java oraz Apache Tomcat i paczk\u0119 WAR z aplikacj\u0105. Jedynym uruchomionym procesem staje si\u0119 w\u00f3wczas wirtualna maszyna Javy z Tomcatem i nasz\u0105 aplikacj\u0105.<\/p>\n\n\n\n<p>Docker pozwala wykorzystywa\u0107 gotowe obrazy zainstalowanych system\u00f3w, aplikacji i baz danych, kt\u00f3re zosta\u0142y wcze\u015bniej przygotowane i umieszczone w publicznym rejestrze. Dzi\u0119ki temu, je\u015bli chcemy u\u017cywa\u0107 PostgreSQL, Redis, RubyOnRails albo Wildfly, jest du\u017ca szansa na to, \u017ce gotowy obraz b\u0119dziemy mogli pobra\u0107 z repozytorium i nie stracimy czasu na jego przygotowanie.<\/p>\n\n\n\n<p>Je\u015bli jednak nie znajdziemy tego, czego szukamy, to zawsze mo\u017cemy zbudowa\u0107 w\u0142asny obraz, bazuj\u0105c na jednym z bardziej generycznych, zawieraj\u0105cych tylko zainstalowany system operacyjny (<a href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fhub.docker.com%2F_%2Fubuntu%2F&amp;data=04%7C01%7Cdbaldyga%40sii.pl%7C39b0068498ea494d8b2108d9b65e14da%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C637741337491276281%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=%2BgejDzVCo3ucN%2Bxtk4PTWBmZTnsyn3Mn3hC7GBLwFnA%3D&amp;reserved=0\" rel=\"nofollow\" >Ubuntu<\/a>, <a href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fhub.docker.com%2F_%2Ffedora%2F&amp;data=04%7C01%7Cdbaldyga%40sii.pl%7C39b0068498ea494d8b2108d9b65e14da%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C637741337491286231%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=QcO5asrTSAKBkZFnJgwFRtxQuJKsHnszEyMX4bINhmw%3D&amp;reserved=0\" rel=\"nofollow\" >Fedora<\/a>, Alpine itp\u2026) lub zainstalowane \u015brodowisko uruchomieniowe (<a href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fhub.docker.com%2F_%2Fjava%2F&amp;data=04%7C01%7Cdbaldyga%40sii.pl%7C39b0068498ea494d8b2108d9b65e14da%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C637741337491286231%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=p8fqjpqOgZWkRosn6I4QM3r3XETl7iy8qGFTn5E6qUk%3D&amp;reserved=0\" rel=\"nofollow\" >Java<\/a>, <a href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fhub.docker.com%2F_%2Fpython%2F&amp;data=04%7C01%7Cdbaldyga%40sii.pl%7C39b0068498ea494d8b2108d9b65e14da%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C637741337491296186%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=1ZaYKW%2BTf4OJoMUFslO%2F%2B204SE0x0Mm%2FcCUtvuicJWI%3D&amp;reserved=0\" rel=\"nofollow\" >Python<\/a>&nbsp;czy <a href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fhub.docker.com%2Fr%2Fmicrosoft%2Faspnet%2F&amp;data=04%7C01%7Cdbaldyga%40sii.pl%7C39b0068498ea494d8b2108d9b65e14da%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C637741337491296186%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=zAdZB0C8LV9NWeGNdlnGOLi%2F50y66CaUyauWpQfcsi8%3D&amp;reserved=0\" rel=\"nofollow\" >ASP.NET<\/a>).<\/p>\n\n\n\n<p>Wykorzystuj\u0105c kontenery zyskujemy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0141atwo\u015b\u0107 tworzenia oraz powtarzalno\u015b\u0107 \u015brodowisk deweloperskich.<\/li>\n\n\n\n<li>Uproszczenie proces\u00f3w dostarczania gotowych aplikacji na docelowe \u015brodowiska w szczeg\u00f3lno\u015bci rozproszone.<\/li>\n\n\n\n<li>Uruchamianie na Windows, Linux, macOS, Kubernetes.<\/li>\n\n\n\n<li>Mo\u017cliwo\u015b\u0107 eksperymentowania z r\u00f3\u017cnymi wersjami oprogramowania.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/oferty-pracy\/all\/all\/docker\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"737\" height=\"170\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/12\/praca-m-12.jpg\" alt=\"oferta pracy\" class=\"wp-image-29766\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/12\/praca-m-12.jpg 737w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/12\/praca-m-12-300x69.jpg 300w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Kilka s\u0142\u00f3w podsumowania<\/strong><\/h2>\n\n\n\n<p>Wida\u0107 wyra\u017anie, \u017ce \u015brodowisko deweloperskie mo\u017cna zbudowa\u0107 z gotowych obraz\u00f3w zawieraj\u0105cych zainstalowane kontenery i us\u0142ugi. Mechanizm budowania obraz\u00f3w kontener\u00f3w mo\u017cemy wykorzysta\u0107 tak\u017ce w drug\u0105 stron\u0119 i dostarcza\u0107 nasze konkretne aplikacje w postaci obraz\u00f3w. Bez wzgl\u0119du na technologi\u0119 wykorzystan\u0105 w aplikacji, obraz kontenera b\u0119dzie dostarczany w identyczny spos\u00f3b, co upraszcza procedury instalacyjne.<\/p>\n\n\n\n<p>Proces dostarczania aplikacji mo\u017ce zosta\u0107 zautomatyzowany przez odpowiednie narz\u0119dzia.<\/p>\n\n\n\n<p>Kontenery by\u0142y od samego pocz\u0105tku wspierane przez systemy Linux, jednak obecnie&nbsp;s\u0105 dost\u0119pne <a href=\"https:\/\/hub.docker.com\/publishers\/microsoftowner\" rel=\"nofollow\" >r\u00f3wnie\u017c na Windows<\/a>.<br><a href=\"(https:\/docs.docker.com\/desktop\/windows\/wsl\/\" rel=\"nofollow\" >Windows Subsystem dla Linux<\/a> (WSL 2) wprowadzi\u0142 istotn\u0105 zmian\u0119 &#8211; pozwala uruchamia\u0107 kontenery Linuxa natywnie, bez wirtualizacji.<br><a href=\"https:\/\/docs.docker.com\/desktop\/mac\/install\/\" rel=\"nofollow\" >W przypadku macOS<\/a> niestety potrzebna jest dodatkowa wirtualizacja.<\/p>\n\n\n\n<p>W nast\u0119pnych wpisach postaram si\u0119 opisa\u0107 <a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-instalacja-i-budowanie-pierwszego-srodowiska\/?category=development-na-twardo&amp;tag=devops,docker,postgresql\" class=\"ek-link\">tworzenie obraz\u00f3w<\/a> Dockera oraz <a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-budowa-srodowiska-rozwojowego-cz-2\/?category=development-na-twardo&amp;tag=camunda,devops,docker\" class=\"ek-link\">budowanie \u015brodowiska deweloperskiego<\/a>.<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Seria artyku\u0142\u00f3w nt. Dockera zaktualizowana w 2021 i 2022 roku<\/strong><\/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=\"noreferrer 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=\"noreferrer noopener\">Docker dla programist\u00f3w \u2013 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=\"noreferrer noopener\">Docker dla programist\u00f3w \u2013 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=\"noreferrer noopener\">Docker dla programist\u00f3w \u2013 dystrybucja aplikacji&nbsp;<\/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;1023&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;89&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;4.9&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.9\\\/5 ( votes: 89)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Docker dla programist\u00f3w, co to jest?&quot;,&quot;width&quot;:&quot;136.6&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: 136.6px;\">\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.9\/5 ( votes: 89)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Docker to obecnie niezb\u0119dne narz\u0119dzie dla wi\u0119kszo\u015bci programist\u00f3w. Wed\u0142ug bada\u0144 Stack Overflow, Docker jest technologi\u0105, kt\u00f3rej znajomo\u015b\u0107 jest najbardziej po\u017c\u0105dana &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-co-to-jest\/\">Continued<\/a><\/p>\n","protected":false},"author":324,"featured_media":1697,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":3,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[2427,1546,154,153,224],"class_list":["post-1023","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-digital","tag-przeglad-narzedzi","tag-devops","tag-docker","tag-kontener"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/12\/docker1.png","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1023"}],"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=1023"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1023\/revisions"}],"predecessor-version":[{"id":29772,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1023\/revisions\/29772"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/1697"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=1023"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=1023"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=1023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}