{"id":423,"date":"2026-05-26T08:39:20","date_gmt":"2026-05-26T07:39:20","guid":{"rendered":"https:\/\/masterymesh.com\/blog\/?p=423"},"modified":"2026-05-26T08:39:22","modified_gmt":"2026-05-26T07:39:22","slug":"docker-za-pocetnike","status":"publish","type":"post","link":"https:\/\/masterymesh.com\/blog\/web-development\/docker-za-pocetnike\/","title":{"rendered":"Docker za po\u010detnike: Prakti\u010dan vodi\u010d kroz kontejnerizaciju"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Docker je postao industrija standard za deployment aplikacija, ali mnogi developeri odga\u0111aju u\u010denje jer kontejnerizacija zvu\u010di slo\u017eeno i apstraktno. Ovaj vodi\u010d obja\u0161njava Docker za po\u010detnike kroz konkretan pristup \u2014 \u0161to Docker zapravo rje\u0161ava, kako funkcionira, i kako ga po\u010deti koristiti bez prethodnog iskustva s DevOps alatima.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Razumijevanje Dockera nije samo tehni\u010dka vje\u0161tina \u2014 to je prakti\u010dno znanje koje omogu\u0107ava br\u017ei development, pouzdaniji deployment i jednostavnije odr\u017eavanje aplikacija. Bilo da radite na osobnim projektima, freelance poslovima ili u timu, Docker eliminira klasi\u010dan problem &#8220;kod mene radi&#8221; i omogu\u0107ava vam da fokusirate vrijeme na development umjesto na okolinska pode\u0161avanja.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Sadr\u017eaj<\/h2><nav><ul><li class=\"\"><a href=\"#sto-je-docker-i-zasto-ga-developeri-koriste\">\u0160to je Docker i za\u0161to ga developeri koriste?<\/a><\/li><li class=\"\"><a href=\"#kljucni-docker-koncepti-koje-morate-razumjeti\">Klju\u010dni Docker koncepti koje morate razumjeti<\/a><\/li><li class=\"\"><a href=\"#instalacija-dockera-prvi-koraci\">Instalacija Dockera: Prvi koraci<\/a><\/li><li class=\"\"><a href=\"#vas-prvi-docker-kontejner-hello-world-primjer\">Va\u0161 prvi Docker kontejner: Hello World primjer<\/a><\/li><li class=\"\"><a href=\"#kreiranje-vlastitog-docker-imagea\">Kreiranje vlastitog Docker imagea<\/a><\/li><li class=\"\"><a href=\"#najcesce-docker-naredbe-koje-trebate-znati\">Naj\u010de\u0161\u0107e Docker naredbe koje trebate znati<\/a><\/li><li class=\"\"><a href=\"#docker-compose-pokretanje-visestrukih-kontejnera\">Docker Compose: Pokretanje vi\u0161estrukih kontejnera<\/a><\/li><li class=\"\"><a href=\"#docker-volumes-perzistencija-podataka\">Docker Volumes: Perzistencija podataka<\/a><\/li><li class=\"\"><a href=\"#best-practice-za-docker-za-pocetnike\">Best practice za Docker za po\u010detnike<\/a><\/li><li class=\"\"><a href=\"#najcesce-greske-koje-pocetnci-rade-s-dockerom\">Naj\u010de\u0161\u0107e gre\u0161ke koje po\u010detnci rade s Dockerom<\/a><\/li><li class=\"\"><a href=\"#docker-u-realnom-development-workflowu\">Docker u realnom development workflowu<\/a><\/li><li class=\"\"><a href=\"#sljedeci-koraci-u-ucenju-dockera\">Sljede\u0107i koraci u u\u010denju Dockera<\/a><\/li><li class=\"\"><a href=\"#cesto-postavljana-pitanja\">\u010cesto postavljana pitanja<\/a><\/li><li class=\"\"><a href=\"#zavrsna-misao-docker-za-pocetnike-je-laksi-nego-sto-mislite\">Zavr\u0161na misao: Docker za po\u010detnike je lak\u0161i nego \u0161to mislite<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"sto-je-docker-i-zasto-ga-developeri-koriste\" class=\"wp-block-heading\">\u0160to je Docker i za\u0161to ga developeri koriste?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker je platforma za razvoj, pakiranje i pokretanje aplikacija unutar izoliranih okru\u017eenja zvanih kontejneri. Kontejner je lagan, prenosiv paket koji sadr\u017ei va\u0161u aplikaciju i sve \u0161to joj treba za rad: kod, runtime, sistemske biblioteke, ovisnosti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Problem koji Docker rje\u0161ava:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prije Dockera, development je \u010desto uklju\u010divao frustriraju\u0107e situacije: kod radi na va\u0161em ra\u010dunalu, ali ne na serveru. Radi na serveru, ali ne na ra\u010dunalu kolege. Production okolina ima drugu verziju Node.js-a ili Pythona, i aplikacija pada bez jasnog razloga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker eliminira ove probleme pakiranjem aplikacije i njenog okru\u017eenja u standardiziran kontejner koji radi identi\u010dno svugdje \u2014 na va\u0161em laptopu, na serveru, u cloudu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Za\u0161to Docker, a ne virtualne ma\u0161ine?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kontejneri dijele kernel operativnog sustava hosta, \u0161to ih \u010dini puno lak\u0161ima i br\u017eima od virtualnih ma\u0161ina. VM mora pokrenuti \u010ditav operativni sustav (uklju\u010duju\u0107i kernel), \u0161to tro\u0161i memoriju i CPU. Kontejner koristi host kernel i pokre\u0107e samo aplikaciju.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rezultat: mo\u017eete pokrenuti desetke kontejnera na istom serveru bez zna\u010dajnog optere\u0107enja, dok bi isti broj VM-ova bio neizvediv.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"kljucni-docker-koncepti-koje-morate-razumjeti\" class=\"wp-block-heading\">Klju\u010dni Docker koncepti koje morate razumjeti<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prije nego \u0161to po\u010dnete raditi s Dockerom, morate razumjeti nekoliko osnovnih koncepata. Ovo nisu apstraktni termini \u2014 svaki ima konkretnu svrhu u va\u0161em workflow-u.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker Image:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Image je blueprint za kontejner. To je read-only predlo\u017eak koji sadr\u017ei sve potrebno za pokretanje aplikacije: operativni sustav (obi\u010dno lightweight Linux distro), runtime (Node.js, Python, PHP), ovisnosti (npm paketi, pip biblioteke), i va\u0161 kod.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Image se ne mijenja. Svaki put kada pokrenete kontejner iz imagea, dobivate istu konzistentnu okolinu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker Container:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kontejner je pokrenuta instanca imagea. Dok je image stati\u010dan blueprint, kontejner je \u017eivo okru\u017eenje gdje se va\u0161a aplikacija izvr\u0161ava. Mo\u017eete imati jedan image i pokrenuti vi\u0161e kontejnera iz njega.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kontejneri su izolirani: svaki ima svoj filesystem, mre\u017eu i procese. Mogu me\u0111usobno komunicirati preko mre\u017ee, ali ne mogu direktno pristupiti filesystemu drugih kontejnera.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Dockerfile:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dockerfile je tekstualna datoteka s uputama za kreiranje Docker imagea. Definira \u0161to ide u image: base OS, instalaciju ovisnosti, kopiranje koda, konfiguraciju porta, i naredbu za pokretanje aplikacije.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dockerfile je kao recept \u2014 jasno opisuje sve korake potrebne da se od nule napravi funkcionalno okru\u017eenje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker Hub:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker Hub je javni registry gdje se pohranjuju i dijele Docker image-i. Mo\u017eete preuzeti slu\u017ebene image-e za Node.js, PostgreSQL, Nginx, Redis i tisu\u0107e drugih alata, ili uploadati svoje custom image-e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ovo je kao npm ili pip, ali za \u010ditava okru\u017eenja umjesto paketa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker Compose:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker Compose omogu\u0107ava definiranje i pokretanje aplikacija s vi\u0161e kontejnera pomo\u0107u jedne YAML datoteke. Ako va\u0161a aplikacija treba Node.js backend, PostgreSQL bazu i Redis cache, Compose omogu\u0107ava pokretanje svih triju kontejnera jednom naredbom.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"instalacija-dockera-prvi-koraci\" class=\"wp-block-heading\">Instalacija Dockera: Prvi koraci<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Instalacija Dockera je prili\u010dno direktna, ali razlikuje se ovisno o operativnom sustavu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker Desktop za Windows i macOS:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker Desktop je slu\u017ebena aplikacija koja uklju\u010duje Docker Engine, CLI alate i grafi\u010dko su\u010delje. Preuzima se s docker.com, instalira kao obi\u010dna aplikacija, i pru\u017ea kompletan Docker stack.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nakon instalacije, otvorite terminal i provjerite instalaciju:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker --version\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ako se ispi\u0161e verzija Dockera, instalacija je uspje\u0161na.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker na Linux sustavima:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na Linuxu se Docker instalira kroz paket menad\u017eer. Za Ubuntu\/Debian:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt update\nsudo apt install docker.io\nsudo systemctl start docker\nsudo systemctl enable docker\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Za Fedora\/RHEL:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo dnf install docker\nsudo systemctl start docker\nsudo systemctl enable docker\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Nakon instalacije dodajte svog korisnika u docker grupu kako ne biste morali koristiti sudo za svaku naredbu:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo usermod -aG docker $USER\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Odjavite se i ponovno se prijavite kako bi promjena stupila na snagu.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"vas-prvi-docker-kontejner-hello-world-primjer\" class=\"wp-block-heading\">Va\u0161 prvi Docker kontejner: Hello World primjer<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najbolji na\u010din u\u010denja Dockera je prakti\u010dan rad. Po\u010dinjemo s jednostavnim primjerom koji pokre\u0107e slu\u017ebeni test image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pokretanje Hello World kontejnera:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker run hello-world\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ova naredba:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Provjerava imate li <code>hello-world<\/code> image lokalno<\/li>\n\n\n\n<li>Ako ga nema, preuzima ga s Docker Huba<\/li>\n\n\n\n<li>Kreira kontejner iz imagea<\/li>\n\n\n\n<li>Pokre\u0107e kontejner, ispisuje poruku, i zaustavlja se<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Output pokazuje kako Docker funkcionira: preuzimanje imagea, kreiranje kontejnera, izvr\u0161avanje.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pokretanje interaktivnog Linux kontejnera:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker run -it ubuntu bash\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Opcije:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-it<\/code>: Kombinacija <code>-i<\/code> (interaktivni) i <code>-t<\/code> (terminal) omogu\u0107ava interakciju s kontejnerom<\/li>\n\n\n\n<li><code>ubuntu<\/code>: Image koji koristimo<\/li>\n\n\n\n<li><code>bash<\/code>: Naredba koja se pokre\u0107e unutar kontejnera<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sada ste unutar Ubuntu kontejnera. Mo\u017eete pokretati Linux naredbe:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nls\npwd\napt update\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Za izlaz iz kontejnera: <code>exit<\/code><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"kreiranje-vlastitog-docker-imagea\" class=\"wp-block-heading\">Kreiranje vlastitog Docker imagea<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ovdje po\u010dinje prakti\u010dna primjena. Kreirat \u0107emo jednostavnu Node.js aplikaciju, paketirati je u Docker image i pokrenuti kao kontejner.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kreiranje Node.js aplikacije:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Napravite direktorij za projekt i unutra kreirajte <code>app.js<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nconst express = require(&#039;express&#039;);\nconst app = express();\nconst port = 3000;\n\napp.get(&#039;\/&#039;, (req, res) =&gt; {\n  res.send(&#039;Hello Docker!&#039;);\n});\n\napp.listen(port, () =&gt; {\n  console.log(`App running on port ${port}`);\n});\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Kreirajte <code>package.json<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n{\n  &quot;name&quot;: &quot;docker-example&quot;,\n  &quot;version&quot;: &quot;1.0.0&quot;,\n  &quot;main&quot;: &quot;app.js&quot;,\n  &quot;dependencies&quot;: {\n    &quot;express&quot;: &quot;^4.18.0&quot;\n  }\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Kreiranje Dockerfile-a:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">U istom direktoriju kreirajte datoteku <code>Dockerfile<\/code> (bez ekstenzije):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Base image s Node.js\nFROM node:18-alpine\n\n# Postavljanje radnog direktorija\nWORKDIR \/app\n\n# Kopiranje package.json i instalacija ovisnosti\nCOPY package*.json .\/\nRUN npm install\n\n# Kopiranje aplikacijskog koda\nCOPY . .\n\n# Expose porta\nEXPOSE 3000\n\n# Naredba za pokretanje aplikacije\nCMD &#x5B;&quot;node&quot;, &quot;app.js&quot;]\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Obja\u0161njenje Dockerfile uputa:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>FROM<\/code>: Definira base image (Node.js verzija 18 na Alpine Linuxu, lightweight distro)<\/li>\n\n\n\n<li><code>WORKDIR<\/code>: Postavlja radni direktorij unutar kontejnera<\/li>\n\n\n\n<li><code>COPY<\/code>: Kopira datoteke s hosta u kontejner<\/li>\n\n\n\n<li><code>RUN<\/code>: Izvr\u0161ava naredbu tijekom buildanja imagea (instalacija ovisnosti)<\/li>\n\n\n\n<li><code>EXPOSE<\/code>: Dokumentira koji port aplikacija koristi<\/li>\n\n\n\n<li><code>CMD<\/code>: Definira zadanu naredbu koja se pokre\u0107e kada kontejner startuje<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Buildanje Docker imagea:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker build -t moja-node-app .\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Opcije:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>build<\/code>: Naredba za kreiranje imagea<\/li>\n\n\n\n<li><code>-t moja-node-app<\/code>: Tag (ime) imagea<\/li>\n\n\n\n<li><code>.<\/code>: Kontekst (trenutni direktorij gdje je Dockerfile)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Build proces prolazi kroz sve upute u Dockerfile-u i kreira image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pokretanje kontejnera iz imagea:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker run -p 3000:3000 moja-node-app\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Opcije:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>-p 3000:3000<\/code>: Port mapping (host port:container port)<\/li>\n\n\n\n<li><code>moja-node-app<\/code>: Ime imagea<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Aplikacija je sada dostupna na <code>http:\/\/localhost:3000<\/code><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"najcesce-docker-naredbe-koje-trebate-znati\" class=\"wp-block-heading\">Naj\u010de\u0161\u0107e Docker naredbe koje trebate znati<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker CLI ima mnogo naredbi, ali za svakodnevni rad trebate nekoliko osnovnih.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Rad s containerima:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Pokretanje kontejnera\ndocker run &#x5B;opcije] image\n\n# Popis pokrenutih kontejnera\ndocker ps\n\n# Popis svih kontejnera (uklju\u010duju\u0107i zaustavljene)\ndocker ps -a\n\n# Zaustavljanje kontejnera\ndocker stop container_id\n\n# Brisanje kontejnera\ndocker rm container_id\n\n# Pokretanje kontejnera u pozadini (detached mode)\ndocker run -d image\n\n# Pregled logova kontejnera\ndocker logs container_id\n\n# Izvr\u0161avanje naredbe unutar pokrenutog kontejnera\ndocker exec -it container_id bash\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Rad s imageima:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Popis lokalnih imagea\ndocker images\n\n# Preuzimanje imagea s Docker Huba\ndocker pull image_name\n\n# Brisanje imagea\ndocker rmi image_id\n\n# Buildanje imagea\ndocker build -t tag_name .\n\n# Tagiranje imagea\ndocker tag local_image:tag registry\/image:tag\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>\u010ci\u0161\u0107enje sistema:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Brisanje svih zaustavljenih kontejnera\ndocker container prune\n\n# Brisanje neiskori\u0161tenih imagea\ndocker image prune\n\n# Brisanje svega (kontejneri, image, volumeni, mre\u017ee)\ndocker system prune -a\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"docker-compose-pokretanje-visestrukih-kontejnera\" class=\"wp-block-heading\">Docker Compose: Pokretanje vi\u0161estrukih kontejnera<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Realne aplikacije rijetko koriste jedan kontejner. Obi\u010dno trebate aplikaciju, bazu podataka, cache, mo\u017eda reverse proxy. Docker Compose omogu\u0107ava upravljanje svim tim kontejnerima kroz jednu konfiguraciju.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Instalacija Docker Compose:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker Desktop ve\u0107 uklju\u010duje Docker Compose. Na Linuxu se instalira zasebno:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt install docker-compose\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Primjer: Node.js aplikacija s PostgreSQL bazom:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kreirajte <code>docker-compose.yml<\/code>:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\nversion: &#039;3.8&#039;\n\nservices:\n  app:\n    build: .\n    ports:\n      - &quot;3000:3000&quot;\n    environment:\n      - DATABASE_URL=postgresql:\/\/user:password@db:5432\/mydb\n    depends_on:\n      - db\n\n  db:\n    image: postgres:15\n    environment:\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n      POSTGRES_DB: mydb\n    volumes:\n      - postgres_data:\/var\/lib\/postgresql\/data\n\nvolumes:\n  postgres_data:\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Pokretanje multi-container aplikacije:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Pokretanje svih servisa\ndocker-compose up\n\n# Pokretanje u pozadini\ndocker-compose up -d\n\n# Zaustavljanje servisa\ndocker-compose down\n\n# Rebuild i pokretanje\ndocker-compose up --build\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Docker Compose automatski kreira mre\u017eu gdje kontejneri mogu komunicirati me\u0111usobno po imenu servisa (<code>db<\/code>, <code>app<\/code>).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"docker-volumes-perzistencija-podataka\" class=\"wp-block-heading\">Docker Volumes: Perzistencija podataka<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kontejneri su po defaultu efemerni \u2014 kada ih zaustavite i obri\u0161ete, svi podaci unutra nestaju. Za perzistenciju podataka koristite volume-e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0160to su Docker volumes:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Volume je mehanizam za pohranjivanje podataka izvan kontejnera. Omogu\u0107ava da podaci pre\u017eive brisanje kontejnera i mogu biti dijeljeni izme\u0111u vi\u0161e kontejnera.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kreiranje i kori\u0161tenje volumea:<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Kreiranje volumea\ndocker volume create my_data\n\n# Pokretanje kontejnera s volumeom\ndocker run -v my_data:\/app\/data image_name\n\n# Popis volumena\ndocker volume ls\n\n# Brisanje volumea\ndocker volume rm my_data\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Bind mounts vs volumes:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bind mount povezuje direktorij s hosta direktno u kontejner. Koristan je za development jer omogu\u0107ava live reload:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker run -v $(pwd):\/app node:18 npm start\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Volumes su preferiran pristup za production jer ih Docker upravlja i nude bolje performanse.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"best-practice-za-docker-za-pocetnike\" class=\"wp-block-heading\">Best practice za Docker za po\u010detnike<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kada po\u010dinjete koristiti Docker, ovih nekoliko principa \u0107e vam pomo\u0107i izbjegavati \u010deste gre\u0161ke i graditi kvalitetnije image-e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Koristite lightweight base image-e:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Umjesto pune Ubuntu ili Debian distribucije, koristite Alpine verzije. Node.js image s Alpine Linuxom je 10x manji od verzije s punim Debian OS-om:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Lo\u0161e: 900MB\nFROM node:18\n\n# Dobro: 120MB\nFROM node:18-alpine\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Manji image-i zna\u010de br\u017ei download, manje zauze\u0107a diska i br\u017ei build.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Optimizirajte redoslijed Dockerfile uputa:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker cachira svaki layer. Ako ni\u0161ta nije promijenjeno u nekom koraku, Docker ponovo koristi cached layer umjesto rebuild-a. Stavljajte operacije koje se rijetko mijenjaju na po\u010detak:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Dobro: Ovisnosti se ne mijenjaju \u010desto\nCOPY package*.json .\/\nRUN npm install\n\n# Kod se mijenja \u010desto\nCOPY . .\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ovaj redoslijed zna\u010di da Docker ne mora ponovno instalirati npm pakete svaki put kada promijenite kod.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Koristite .dockerignore:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kao <code>.gitignore<\/code>, <code>.dockerignore<\/code> definira \u0161to ne treba biti kopirano u image:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nnode_modules\n.git\n.env\n*.log\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ovo smanjuje veli\u010dinu build konteksta i ubrzava proces.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Ne pokre\u0107ete aplikacije kao root:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker kontejneri po defaultu pokre\u0107u procese kao root korisnik, \u0161to je sigurnosni rizik. Kreirajte non-root korisnika:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nRUN addgroup -g 1001 appuser &amp;amp;&amp;amp; \\\n    adduser -D -u 1001 -G appuser appuser\n\nUSER appuser\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Koristite multi-stage builds za production:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Multi-stage build omogu\u0107ava da build ovisnosti ostanu u build stageu, dok finalni image sadr\u017ei samo runtime:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Build stage\nFROM node:18-alpine AS builder\nWORKDIR \/app\nCOPY package*.json .\/\nRUN npm install\nCOPY . .\nRUN npm run build\n\n# Production stage\nFROM node:18-alpine\nWORKDIR \/app\nCOPY --from=builder \/app\/dist .\/dist\nCOPY package*.json .\/\nRUN npm install --production\nCMD &#x5B;&quot;node&quot;, &quot;dist\/index.js&quot;]\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Finalni image je puno manji jer ne sadr\u017ei development ovisnosti i build alate.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"najcesce-greske-koje-pocetnci-rade-s-dockerom\" class=\"wp-block-heading\">Naj\u010de\u0161\u0107e gre\u0161ke koje po\u010detnci rade s Dockerom<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Gre\u0161ka 1: Pokretanje previ\u0161e procesa u jednom kontejneru<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker kontejneri su dizajnirani za jedan proces. Ne pokre\u0107ite Node.js aplikaciju, Nginx i Redis u istom kontejneru \u2014 podijelite ih u zasebne kontejnere i spojite ih s Docker Compose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Gre\u0161ka 2: Ignoriranje security best practices<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ne koristite <code>latest<\/code> tag u production jer se mo\u017ee promijeniti. Uvijek specificirajte verziju:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# Lo\u0161e\nFROM node:latest\n\n# Dobro\nFROM node:18.17.0-alpine\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><strong>Gre\u0161ka 3: Postavljanje senzitivnih podataka u Dockerfile<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nikada ne hardkodirajte lozinke, API klju\u010deve ili tokene u Dockerfile. Koristite environment varijable:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker run -e DATABASE_PASSWORD=secret app\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ili Docker secrets u production okru\u017eenju.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Gre\u0161ka 4: Zanemarivanje veli\u010dine imagea<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veliki image-i usporavaju deployment i zauzimaju prostor. Redovno provjeravajte veli\u010dinu:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker images\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Koristite multi-stage build i Alpine base image-e gdje je mogu\u0107e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Gre\u0161ka 5: Ne \u010di\u0161\u0107enje neiskori\u0161tenih resursa<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker nakuplja zaustavljene kontejnere, neiskori\u0161tene image-e i volume-e. Redovno \u010distite:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker system prune -a\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"docker-u-realnom-development-workflowu\" class=\"wp-block-heading\">Docker u realnom development workflowu<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker nije samo deployment alat \u2014 to je mo\u0107an dio development procesa koji omogu\u0107ava konzistentnost kroz cijeli tim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Local development setup:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Umjesto instaliranja Node.js, PostgreSQL, Redis, MongoDB i ostalih ovisnosti direktno na va\u0161 laptop, pokrenite sve kao Docker kontejnere. Va\u0161 laptop ostaje \u010dist, a setup projekta postaje jednostavan:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ngit clone repo\ndocker-compose up\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Novi \u010dlan tima mo\u017ee pokrenuti kompletan projekt u par minuta bez instaliranja desetaka ovisnosti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Testing okru\u017eenje:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker omogu\u0107ava kreiranje identi\u010dnog okru\u017eenja za testiranje. CI\/CD pipeline pokre\u0107e testove u istom kontejneru gdje \u0107e aplikacija kasnije raditi u productionu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Deployment na server:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kada deployate aplikaciju, ne morate brinuti o verzijama Node.js-a, Python bibliotekama ili sistemskim ovisnostima na serveru. Deployate Docker image koji ve\u0107 sadr\u017ei sve potrebno.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"sljedeci-koraci-u-ucenju-dockera\" class=\"wp-block-heading\">Sljede\u0107i koraci u u\u010denju Dockera<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kada savladate osnove, ovi koncepti omogu\u0107avaju slo\u017eenije use case-ove:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker networking:<\/strong> Razumijevanje kako kontejneri komuniciraju me\u0111usobno kroz bridge, host i overlay mre\u017ee.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker orchestration:<\/strong> Alati poput Kubernetes i Docker Swarm za upravljanje stotinama kontejnera kroz vi\u0161e servera.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CI\/CD integracija:<\/strong> Automatizacija build procesa i deployment-a s Docker image-ima kroz GitHub Actions, GitLab CI ili Jenkins.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Security hardening:<\/strong> Skeniranje vulnerabilitya u image-ima, implementacija secrets managementa, i network segmentacija.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Monitoring i logging:<\/strong> Prikupljanje logova iz kontejnera, pra\u0107enje performansi i resource consumption-a.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"cesto-postavljana-pitanja\" class=\"wp-block-heading\">\u010cesto postavljana pitanja<\/h2>\n\n\n\n<h3 id=\"je-li-docker-besplatan\" class=\"wp-block-heading\">Je li Docker besplatan?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Docker Engine je open-source i besplatan za sve use case-ove. Docker Desktop je besplatan za individualne developere, edukaciju i male tvrtke. Ve\u0107e organizacije mogu trebati pla\u0107enu licencu za Docker Desktop, ali mogu koristiti Docker Engine na Linux serverima bez tro\u0161kova.<\/p>\n\n\n\n<h3 id=\"mogu-li-koristiti-docker-na-windowsima\" class=\"wp-block-heading\">Mogu li koristiti Docker na Windowsima?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Da. Docker Desktop funkcionira na Windows 10\/11 Pro, Enterprise ili Education s WSL 2 (Windows Subsystem for Linux). Windows Home tako\u0111er mo\u017ee pokretati Docker Desktop s WSL 2. Performanse su dobre, ali Linux ostaje najoptimalnija platforma za Docker.<\/p>\n\n\n\n<h3 id=\"trebam-li-docker-ako-koristim-cloud-platforme\" class=\"wp-block-heading\">Trebam li Docker ako koristim cloud platforme?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mnoge cloud platforme (AWS ECS\/Fargate, Google Cloud Run, Azure Container Instances, DigitalOcean App Platform) baziraju se na Docker kontejnerima. Razumijevanje Dockera omogu\u0107ava vam u\u010dinkovitije kori\u0161tenje tih servisa. \u010cak i sa serverless pristupom, Docker ostaje koristan za local development.<\/p>\n\n\n\n<h3 id=\"koliko-memorije-i-cpu-a-kontejneri-trose\" class=\"wp-block-heading\">Koliko memorije i CPU-a kontejneri tro\u0161e?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Kontejneri tro\u0161e minimalne resurse. Prazan Alpine Linux kontejner zauzima ~5MB memorije i gotovo nikakav CPU. Resurs consumption ovisi o va\u0161oj aplikaciji, ne o Dockeru. Docker overhead je zanemariv u usporedbi s virtualnim ma\u0161inama.<\/p>\n\n\n\n<h3 id=\"moze-li-docker-zamijeniti-virtualne-masine\" class=\"wp-block-heading\">Mo\u017ee li Docker zamijeniti virtualne ma\u0161ine?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Za ve\u0107inu aplikacija, da. Kontejneri su lak\u0161i, br\u017ei i jednostavniji za upravljanje. Me\u0111utim, VM-ovi su jo\u0161 uvijek potrebni za potpunu izolaciju OS-a, za pokretanje razli\u010ditih kernela, ili za legacy aplikacije koje zahtijevaju specifi\u010dne OS konfiguracije.<\/p>\n\n\n\n<h3 id=\"sto-ako-moja-aplikacija-pada-unutar-kontejnera\" class=\"wp-block-heading\">\u0160to ako moja aplikacija pada unutar kontejnera?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Docker pru\u017ea logove koji pokazuju \u0161to se dogodilo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker logs container_id\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Za debugging, mo\u017eete pokrenuti bash unutar pokrenutog kontejnera:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker exec -it container_id bash\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ili pokrenuti kontejner interaktivno kako biste testirali naredbe:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ndocker run -it image_name bash\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"zavrsna-misao-docker-za-pocetnike-je-laksi-nego-sto-mislite\" class=\"wp-block-heading\">Zavr\u0161na misao: Docker za po\u010detnike je lak\u0161i nego \u0161to mislite<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker za po\u010detnike ne mora biti zastra\u0161uju\u0107. Osnove \u2014 image, kontejner, Dockerfile, Compose \u2014 mo\u017eete svladati za vikend prakti\u010dnog rada. Ono \u0161to izgleda kompleksno s distance postaje intuitivno kada vidite kako Docker eliminira probleme s kojima se ina\u010de svakodnevno susre\u0107ete.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Po\u010dnite s jednostavnim projektom: pakirajte Node.js aplikaciju u Docker image, pokrenite je kao kontejner, dodajte bazu podataka kroz Docker Compose. Ovaj prakti\u010dan rad gradi razumijevanje br\u017ee nego \u010ditanje dokumentacije.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker nije samo trend \u2014 to je standard kako moderne aplikacije rade u developmentu i productionu. Investiranje vremena u u\u010denje Dockera sada \u0161tedi stotine sati debugging-a problema s okru\u017eenjima kasnije.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Trebate pomo\u0107 oko Docker setupa za va\u0161 projekt ili deployment procesa?<\/strong><br><a href=\"https:\/\/masterymesh.com\/\">MasteryMesh<\/a> mo\u017ee postaviti Docker okru\u017eenje, Docker Compose konfiguracije i CI\/CD pipeline koji omogu\u0107ava pouzdan deployment. Kontaktirajte nas za konzultaciju.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Docker je postao industrija standard za deployment aplikacija, ali mnogi developeri odga\u0111aju u\u010denje jer kontejnerizacija&#8230;<\/p>\n","protected":false},"author":1,"featured_media":426,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[6],"tags":[],"class_list":["post-423","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development"],"_links":{"self":[{"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/posts\/423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/comments?post=423"}],"version-history":[{"count":3,"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/posts\/423\/revisions"}],"predecessor-version":[{"id":427,"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/posts\/423\/revisions\/427"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/media\/426"}],"wp:attachment":[{"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/media?parent=423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/categories?post=423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/masterymesh.com\/blog\/wp-json\/wp\/v2\/tags?post=423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}