{"id":1098,"date":"2021-12-27T10:44:59","date_gmt":"2021-12-27T09:44:59","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=1098"},"modified":"2023-03-23T13:53:19","modified_gmt":"2023-03-23T12:53:19","slug":"docker-dla-programistow-budowa-srodowiska-rozwojowego-cz-2","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/docker-dla-programistow-budowa-srodowiska-rozwojowego-cz-2\/","title":{"rendered":"Docker dla programist\u00f3w \u2013 budowa \u015brodowiska rozwojowego. Cz\u0119\u015b\u0107 II"},"content":{"rendered":"\n<p><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\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">W poprzednim wpisie<\/a> pokaza\u0142em, jak mo\u017cna wykorzysta\u0107 Dockera i Docker Compose do uruchomienia us\u0142ugi bazy danych PostgreSQL lokalnie. W bie\u017c\u0105cym wpisie p\u00f3jdziemy krok dalej i do \u015brodowiska rozwojowego dodamy kolejny kontener z preinstalowan\u0105 platform\u0105 Camunda BPM.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Camunda BPM<\/strong><\/h2>\n\n\n\n<p>Camunda dostarcza kompletn\u0105 platform\u0119 BPM (ang. Business Process Management) w wersjach na kilka preinstalowanych serwer\u00f3w aplikacyjnych. Jedn\u0105 z form dystrybucji s\u0105 oficjalne obrazy kontener\u00f3w Dockera dost\u0119pne <a href=\"https:\/\/hub.docker.com\/r\/camunda\/camunda-bpm-platform\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >w publicznym repozytorium<\/a>. Jest to bardzo wygodne, poniewa\u017c nie musimy niczego instalowa\u0107 na swojej maszynie, gdy chcemy szybko uruchomi\u0107 demo lub nawet programowa\u0107 procesy na platformie.<\/p>\n\n\n\n<p>Plan na dzi\u015b: do \u015brodowiska z <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\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">poprzedniego wpisu<\/a>\u00a0doda\u0107 kontener z platform\u0105 BPM oraz uruchomi\u0107 na nim przyk\u0142adowy projekt z procesem BPM.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Przyk\u0142adowy projekt<\/strong><\/h2>\n\n\n\n<p>Zamiast tworzy\u0107 nowy projekt, wykorzystamy gotowy przyk\u0142ad dostarczany w ramach dokumentacji wraz z platform\u0105. \u0179r\u00f3d\u0142a projektu znajduj\u0105 si\u0119 na <a href=\"https:\/\/github.com\/camunda\/camunda-get-started-javaee\" class=\"ek-link\" rel=\"nofollow\" >GitHubie<\/a>. Jest to projekt pokazuj\u0105cy jak mo\u017cna stworzy\u0107 aplikacj\u0119 BPM z formularzami, wykorzystuj\u0105c zasadniczo standardowe komponenty EJB oraz JSF, czyli technologie ze stosu JEE. A skoro tak, to do uruchomienia projektu wykorzystamy Camund\u0119 preinstalowan\u0105 na serwerze aplikacyjnym Wildfly \u2013 ca\u0142o\u015b\u0107 oczywi\u015bcie w postaci obrazu kontenera \ud83d\ude42\u00a0<\/p>\n\n\n\n<p>Pobieramy wspomniany projekt i przechodzimy do niego:<\/p>\n\n\n\n<p><em>git clone <a href=\"https:\/\/eur02.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fgithub.com%2Fcamunda%2Fcamunda-get-started-javaee.git&amp;data=04%7C01%7Cdbaldyga%40sii.pl%7C39d48810721f4369088608d9c48d3259%7Cf9bd6df6c449481fabb537bd036beb76%7C0%7C0%7C637756932980978837%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=l%2FKnE%2FNywN7y%2Bo2XJRFNRv4nDgRssM5YghjOIZ9lb1M%3D&amp;reserved=0\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >https:\/\/github.com\/camunda\/camunda-get-started-javaee.git<br><\/a>cd camunda-get-started-javaee\/<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Kontener<\/strong><\/h2>\n\n\n\n<p>Gotowy obraz mo\u017cna pobra\u0107 z <a href=\"https:\/\/hub.docker.com\/r\/camunda\/camunda-bpm-platform\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >publicznego repozytorium Dockera<\/a>. Jest tutaj dost\u0119pnych kilka wersji r\u00f3\u017cni\u0105cych si\u0119 serwerem aplikacyjnym. Nas b\u0119dzie interesowa\u0107 obraz o nazwie <strong>camunda\/camunda-bpm-platform:wildfly-7.16.0. <\/strong>Je\u015bli przyjrzymy si\u0119 dok\u0142adnie dokumentacji obrazu, dowiemy si\u0119, \u017ce jest skonfigurowany z wbudowan\u0105 baz\u0105 danych H2, ale, za pomoc\u0105 zmiennych \u015brodowiskowych, mo\u017cemy wskaza\u0107 inn\u0105 baz\u0119, pod warunkiem, \u017ce jest wspierana przez Camund\u0119.<\/p>\n\n\n\n<p>Takim systemem jest <strong>PostgreSQL,<\/strong> kt\u00f3rym ju\u017c dysponujemy, wi\u0119c wykorzystamy go w naszym przyk\u0142adzie.<\/p>\n\n\n\n<p>Zabieramy si\u0119 za skonfigurowanie kontenera z Camund\u0105. W tym celu wykorzystamy docker-compose.yml z poprzedniej cz\u0119\u015bci i dodamy definicj\u0119 nowego kontenera. Docelowy plik tworzymy w katalogu z projektem:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nversion: &quot;3.8&quot;\nservices:\n db:\n  container_name: db\n  image: postgres:9.4\n  environment:\n  - POSTGRES_PASSWORD=camunda\n  - POSTGRES_USER=camunda\n  ports:\n  - &quot;5432:5432&quot;\n bpm:\n  container_name: bpm\n  image: camunda\/camunda-bpm-platform:wildfly-7.16.0\n  environment:\n  - DB_DRIVER=postgresql\n  - DB_URL=jdbc:postgresql:\/\/db:5432\/camunda\n  - DB_USERNAME=camunda\n  - DB_PASSWORD=camunda\n  - TZ=Europe\/Warsaw\n  ports:\n  - &quot;8080:8080&quot;\n<\/pre><\/div>\n\n\n<p>Nowy kontener nazywa si\u0119 <strong>bpm<\/strong>&nbsp;i jest oparty o gotowy obraz, a zmienne \u015brodowiskowe definiuj\u0105 parametry po\u0142\u0105czenia do bazy danych i stref\u0119 czasow\u0105. Port 8080 kontenera jest mapowany na taki sam port maszyny hostuj\u0105cej. Na uwag\u0119 zas\u0142uguje zmienna \u015brodowiskowa <strong>DB_URL,<\/strong>&nbsp;kt\u00f3ra zawiera adres jdbc z hostem <strong>db <\/strong>do kontenera bazy danych.<\/p>\n\n\n\n<p>Dodatkowo, dla uproszczenia <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\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">w poprzednim artykule<\/a> konfiguracja docker-compose nie zawiera\u0142a sekcji services i okre\u015blenia wersji formatu. Deklaruj\u0105c wprost wersj\u0119, wymuszamy kompatybilno\u015b\u0107 sk\u0142adni wspieran\u0105 przez dan\u0105 edycj\u0119 docker-compose.\u00a0<\/p>\n\n\n\n<p>Sprawd\u017amy, czy mo\u017cemy odpali\u0107 w ten spos\u00f3b kontenery:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ docker-compose up -d\n$ docker ps --format=&quot;{{ .Names }} \\t {{ .Status }}&quot;\n<\/pre><\/div>\n\n\n<p>Ostatnie polecenie powinno zwr\u00f3ci\u0107:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nbpm Up 29 seconds\ndb Up 29 seconds\n<\/pre><\/div>\n\n\n<p>czyli nazwy kontener\u00f3w bazy danych i aplikacji BPM oraz ich statusy.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Budowanie projektu<\/strong><\/h2>\n\n\n\n<p>Skoro kontenery s\u0105 gotowe i opisane w <strong>docker-compose.yml,<\/strong>&nbsp;pozosta\u0142o zrobi\u0107 ju\u017c tylko jedno: zbudowa\u0107 projekt oraz doda\u0107 w odpowiednim miejscu kontenera Comundy wynikowy WAR z przyk\u0142adowym procesem.<\/p>\n\n\n\n<p>Do budowy potrzebujemy:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>zainstalowanej Javy w wersji 8,<\/li><li>&nbsp;narz\u0119dzia Maven.<\/li><\/ul>\n\n\n\n<p>Instalacja jest w obu przypadkach prosta, dlatego nie b\u0119d\u0119 jej w tym artykule opisywa\u0142.<br><br>Do zbudowania projektu potrzebne jest polecenie:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ mvn install\n<\/pre><\/div>\n\n\n<p>Dodanie pliku WAR wymaga do\u0142\u0105czenia <strong>sekcji volumes<\/strong> do kontenera Camundy. Wpisy w tej sekcji pozwalaj\u0105 zmapowa\u0107 lokalny plik lub katalog z odpowiednikiem wewn\u0105trz kontenera.<\/p>\n\n\n\n<p>Po zbudowaniu projektu w katalogu <strong>target<\/strong>&nbsp;pojawia si\u0119 plik <strong>pizza-order.war<\/strong>. Mapujemy go do wn\u0119trza kontenera w katalogu <strong>\/camunda\/standalone\/deployments\/<\/strong>. Z tego miejsca zostanie automatycznie zainstalowany przez wildfly. Wynikowy docker-compose.yml wygl\u0105da tak:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nversion: &quot;3.8&quot;\nservices:\n db:\n  container_name: db\n  image: postgres:9.4\n  environment:\n  - POSTGRES_PASSWORD=camunda\n  - POSTGRES_USER=camunda\n  ports:\n  - &quot;5432:5432&quot;\n bpm:\n  container_name: bpm\n  image: camunda\/camunda-bpm-platform:wildfly-7.16.0\n  environment:\n  - DB_DRIVER=postgresql\n  - DB_URL=jdbc:postgresql:\/\/db:5432\/camunda\n  - DB_USERNAME=camunda\n  - DB_PASSWORD=camunda\n  - TZ=Europe\/Warsaw\n  ports:\n  - &quot;8080:8080&quot;\n  volumes:\n  - .\/target\/pizza-order.war:\/camunda\/standalone\/deployments\/pizza-order.war\n<\/pre><\/div>\n\n\n<p>Sprawdzimy teraz, czy wszystko dzia\u0142a jak nale\u017cy:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ docker-compose up -d --force-recreate \n<\/pre><\/div>\n\n\n<p>W poleceniu zosta\u0142 dodany parametr &#8211;force-recreate, kt\u00f3ry powoduje ponowne zbudowanie kontener\u00f3w z now\u0105 konfiguracj\u0105. Je\u015bli wszystko posz\u0142o poprawnie, to w logach kontenera bpm powinny by\u0107 poni\u017csze informacje:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n$ docker logs bpm\n\u2026\n15:39:48,206 INFO  &#x5B;org.jboss.as.server] (ServerService Thread Pool -- 47) WFLYSRV0010: Deployed &quot;pizza-order.war&quot; (runtime-name : &quot;pizza-order.war&quot;)\n\u2026\n15:39:48,255 INFO  &#x5B;org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 23.0.2.Final (WildFly Core 15.0.1.Final) started in 10390ms - Started 942 of 1128 services (375 services are lazy, passive or on-demand)\n15:39:48,257 INFO  &#x5B;org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http:\/\/0.0.0.0:9990\/management\n15:39:48,257 INFO  &#x5B;org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http:\/\/0.0.0.0:9990\n<\/pre><\/div>\n\n\n<p>Camunda dostarcza przegl\u0105darkowej aplikacji do zarz\u0105dzania. Mo\u017cna <a href=\"http:\/\/localhost:8080\/camunda\/app\/cockpit\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >sprawdzi\u0107 czy artefakt pizza-order.war jest zainstalowany<\/a>. Domy\u015blny login i has\u0142o to \u201edemo\u201d.<\/p>\n\n\n\n<p>Na za\u0142\u0105czonym zrzucie ekranu zaprezentowa\u0142em zainstalowany proces:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/camunda-pizza-order-002.png\"><img decoding=\"async\" width=\"1024\" height=\"444\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/camunda-pizza-order-002-1024x444.png\" alt=\"Proces instalacji artefaktu pizza-order.war\" class=\"wp-image-20497\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/camunda-pizza-order-002-1024x444.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/camunda-pizza-order-002-300x130.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/camunda-pizza-order-002-768x333.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/03\/camunda-pizza-order-002.png 1521w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Ryc. 1 Proces instalacji artefaktu pizza-order.war<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Uda\u0142o si\u0119 zatem uruchomi\u0107 baz\u0119 danych i serwer wildfly z platform\u0105 zainstalowan\u0105 na lokalnej maszynie. Spos\u00f3b uruchomienia jest zadeklarowany w postaci jednego pliku \u00ad\u2013 docker-compose.yml \ud83d\ude42 Lokalne \u015brodowisko rozwojowe dla przyk\u0142adowego projektu jest gotowe do pracy.<\/p>\n\n\n\n<p>W <a href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-dystrybucja-aplikacji-cz-3\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">nast\u0119pnej cz\u0119\u015bci<\/a>&nbsp;poka\u017c\u0119, jak mo\u017cemy p\u00f3j\u015b\u0107 jeszcze dalej i wykorzysta\u0107 Dockera w celu dostarczenia aplikacji na docelowe \u015brodowiska testowe i produkcyjne.<\/p>\n\n\n\n<p>***<\/p>\n\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\"><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\" class=\"ek-link\">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\" class=\"ek-link\">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\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">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;1098&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;2&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;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 2)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Docker dla programist\u00f3w \u2013 budowa \u015brodowiska rozwojowego. Cz\u0119\u015b\u0107 II&quot;,&quot;width&quot;:&quot;139.5&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: 139.5px;\">\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            5\/5 ( votes: 2)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>W poprzednim wpisie pokaza\u0142em, jak mo\u017cna wykorzysta\u0107 Dockera i Docker Compose do uruchomienia us\u0142ugi bazy danych PostgreSQL lokalnie. W bie\u017c\u0105cym &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/docker-dla-programistow-budowa-srodowiska-rozwojowego-cz-2\/\">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":[154,153,1145],"class_list":["post-1098","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-devops","tag-docker","tag-camunda"],"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\/1098"}],"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=1098"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1098\/revisions"}],"predecessor-version":[{"id":20501,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1098\/revisions\/20501"}],"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=1098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=1098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=1098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}