{"id":78874,"date":"2024-10-03T03:19:01","date_gmt":"2024-10-02T23:49:01","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/how-i-secured-my-containerized-application-using-anchore-day-29-project-474l\/"},"modified":"2024-10-03T03:19:01","modified_gmt":"2024-10-02T23:49:01","slug":"how-i-secured-my-containerized-application-using-anchore-day-29-project-474l","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/how-i-secured-my-containerized-application-using-anchore-day-29-project-474l\/","title":{"rendered":"\u0686\u06af\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Anchore \u0627\u06cc\u0645\u0646 \u06a9\u0631\u062f\u0645 (\u067e\u0631\u0648\u0698\u0647 \u0631\u0648\u0632 29)"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0645\u0646 \u0633\u0627\u0632\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Anchore \u0631\u0627 \u0634\u0631\u062d \u0645\u06cc \u062f\u0647\u062f.\u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u0627\u0645\u0646\u06cc\u062a\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u06cc\u06a9 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0642\u0648\u06cc \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc \u0645\u0628\u062a\u062f\u06cc\u0627\u0646\u060c \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u062a\u0648\u0633\u0637 \u200b\u200b\u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.\u0648 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u0645\u0627 \u0633\u0627\u062e\u062a\u060c \u0622\u0632\u0645\u0627\u06cc\u0634\u060c \u0627\u0633\u06a9\u0646\u060c \u0648 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u0631\u0627 \u067e\u0648\u0634\u0634 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u062f \u0648 \u0628\u0631 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627 \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 \u0622\u0646 \u062a\u0627\u06a9\u06cc\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u062a\u0645\u0631\u06a9\u0632 Anchore \u0627\u0633\u062a\u060c \u0627\u06cc\u0646 \u0627\u0635\u0648\u0644 \u0628\u0631\u0627\u06cc \u0633\u0627\u06cc\u0631 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0645\u0627\u0646\u0646\u062f Aqua Security\u060c Snyk \u0648 Trivy \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>1. \u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u067e\u0631\u0648\u0698\u0647:<\/p>\n<p>\u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0627\u0633\u06a9\u0646 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Anchore \u0627\u062f\u063a\u0627\u0645 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f \u06a9\u0647 \u0641\u0642\u0637 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u06cc\u0645\u0646 \u0645\u0633\u062a\u0642\u0631 \u0645\u06cc \u0634\u0648\u0646\u062f.\u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0634\u0627\u0645\u0644:<\/p>\n<p> \u062a\u0648\u0633\u0639\u0647 \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634:  \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f\u060c \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0635\u0644\u0627\u062d \u06a9\u0646\u06cc\u062f.<br \/>\n \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc: \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0638\u0631\u0641 Docker \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\n \u0627\u0633\u06a9\u0646 \u0627\u0645\u0646\u06cc\u062a\u06cc: \u0627\u0632 Anchore \u0628\u0631\u0627\u06cc \u0627\u0633\u06a9\u0646 \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<br \/>\n \u0633\u0627\u062e\u062a \u0648 \u0647\u0644 \u062f\u0627\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631: \u062a\u0635\u0648\u06cc\u0631 Docker \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f \u0648 \u0641\u0642\u0637 \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0646\u062c\u0627\u0645 \u0627\u0633\u06a9\u0646 \u0628\u0647 \u06cc\u06a9 \u0631\u062c\u06cc\u0633\u062a\u0631\u06cc (\u0645\u062b\u0644\u0627\u064b Docker Hub) \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.<br \/>\n \u0627\u0633\u062a\u0642\u0631\u0627\u0631: \u062a\u0635\u0648\u06cc\u0631 \u0627\u0645\u0646 \u0631\u0627 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0647\u062f\u0641 \u062e\u0648\u062f (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u062e\u0648\u0634\u0647 Kubernetes\u060c minikube) \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>2. \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc Anchore:<\/p>\n<p>\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639\u060c \u0628\u0647 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Anchore Enterprise (\u06cc\u0627 \u06cc\u06a9 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0631\u0627\u06cc\u06af\u0627\u0646) \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f. Anchore CLI \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0631\u062f\u0647 \u0648 \u0622\u0646 \u0631\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<p> \u062f\u0627\u0646\u0644\u0648\u062f \u0648 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f: Anchore CLI \u0631\u0627 \u0627\u0632 \u0648\u0628 \u0633\u0627\u06cc\u062a \u0631\u0633\u0645\u06cc Anchore \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u06cc\u062f. \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0646\u0635\u0628 \u0628\u0633\u062a\u0647 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0639\u0627\u0645\u0644 \u0634\u0645\u0627 \u0645\u062a\u0641\u0627\u0648\u062a \u0627\u0633\u062a.<br \/>\n \u0627\u06cc\u062c\u0627\u062f \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc: \u0627\u06af\u0631 \u0642\u0628\u0644\u0627\u064b \u0646\u062f\u0627\u0631\u06cc\u062f \u06cc\u06a9 \u062d\u0633\u0627\u0628 Anchore \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<br \/>\n \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a: CLI \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0628\u0627 \u062d\u0633\u0627\u0628 Anchore \u062e\u0648\u062f \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0634\u0627\u0645\u0644 \u062a\u0646\u0638\u06cc\u0645 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f API \u06cc\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a Anchore \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<br \/>\n (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc) \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062e\u0637 \u0645\u0634\u06cc:  \u062f\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc Anchore\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062e\u0637\u200c\u0645\u0634\u06cc\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0639\u06cc\u06cc\u0646 \u0622\u0633\u062a\u0627\u0646\u0647\u200c\u0647\u0627\u06cc \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0633\u0637\u062d \u0634\u062f\u062a\u06cc \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0627\u0633\u06a9\u0646 \u0634\u06a9\u0633\u062a \u0645\u06cc \u062e\u0648\u0631\u062f\u060c \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0633\u06cc\u0627\u0633\u062a\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0631 \u0635\u0648\u0631\u062a \u06cc\u0627\u0641\u062a\u0646 \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631\u06cc\u200c\u0647\u0627\u06cc \u0628\u0627\u0644\u0627 \u06cc\u0627 \u062d\u06cc\u0627\u062a\u06cc\u060c \u0633\u0627\u062e\u062a \u0628\u0627 \u0634\u06a9\u0633\u062a \u0645\u0648\u0627\u062c\u0647 \u0634\u0648\u062f.<\/p>\n<p>3. \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 \u0648 \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647:<\/p>\n<p>\u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0648 \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>project-root\/<br \/>\n\u251c\u2500\u2500 Dockerfile<br \/>\n\u251c\u2500\u2500 .github\/<br \/>\n\u2502   \u2514\u2500\u2500 workflows\/<br \/>\n\u2502       \u2514\u2500\u2500 ci.yml<br \/>\n\u251c\u2500\u2500 src\/<br \/>\n\u2502   \u2514\u2500\u2500 app.js<br \/>\n\u2514\u2500\u2500 tests\/<br \/>\n    \u2514\u2500\u2500 app.test.js<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>4. \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 (src\/app.js &#8211; Node.js):<\/p>\n<p>\u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 Node.js Express.js:<\/p>\n<p>const express = require(&#8216;express&#8217;);<br \/>\nconst app = express();<br \/>\nconst port = 3000;<\/p>\n<p>app.get(&#8216;\/&#8217;, (req, res) =&gt; {<br \/>\n  res.send(&#8216;Hello from Day 28!&#8217;);<br \/>\n});<\/p>\n<p>app.listen(port, () =&gt; {<br \/>\n  console.log(`App listening on port ${port}`);<br \/>\n});<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>5. \u0622\u0632\u0645\u0627\u06cc\u0634 (tests\/app.test.js &#8211; \u0647\u0633\u062a):<\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Jest \u0628\u0631\u0627\u06cc \u062a\u0633\u062a \/ \u0645\u0633\u06cc\u0631:<\/p>\n<p>const request = require(&#8216;supertest&#8217;);<br \/>\nconst app = require(&#8216;..\/src\/app&#8217;);<\/p>\n<p>describe(&#8216;GET \/&#8217;, () =&gt; {<br \/>\n  it(&#8216;should respond with Hello from Day 28!&#8217;, async () =&gt; {<br \/>\n    const response = await request(app).get(&#8216;\/&#8217;);<br \/>\n    expect(response.status).toBe(200);<br \/>\n    expect(response.text).toBe(&#8216;Hello from Day 28!&#8217;);<br \/>\n  });<br \/>\n});<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>6. Dockerfile:<\/p>\n<p>\u0627\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 Docker \u0631\u0627 \u0645\u06cc \u0633\u0627\u0632\u062f:<\/p>\n<p>FROM node:14-alpine<br \/>\nWORKDIR \/app<br \/>\nCOPY package*.json .\/<br \/>\nRUN npm install<br \/>\nCOPY . .<br \/>\nUSER node<br \/>\nEXPOSE 3000<br \/>\nCMD [&#8220;node&#8221;, &#8220;app.js&#8221;]\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>7. \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0628\u0627 \u0627\u0642\u062f\u0627\u0645\u0627\u062a GitHub (.github\/workflows\/ci.yml):<\/p>\n<p>\u0627\u06cc\u0646 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f \u0633\u0627\u062e\u062a\u060c \u062a\u0633\u062a \u0648 \u0627\u0633\u06a9\u0646 \u0631\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<p>name: CI\/CD with Anchore Scan<\/p>\n<p>on:<br \/>\n  push:<br \/>\n    branches:<br \/>\n      &#8211; main<\/p>\n<p>jobs:<br \/>\n  build:<br \/>\n    runs-on: ubuntu-latest<br \/>\n    steps:<br \/>\n      &#8211; uses: actions\/checkout@v3<br \/>\n      &#8211; name: Build Docker image<br \/>\n        run: docker build -t myapp:latest .<br \/>\n      &#8211; name: Run tests<br \/>\n        run: npm test<br \/>\n      &#8211; name: Add image to Anchore #Anchore CLI must be configured (see Section 2)<br \/>\n        run: anchore-cli image add myapp:latest<br \/>\n      &#8211; name: Wait for Anchore scan<br \/>\n        run: anchore-cli image wait myapp:latest<br \/>\n      &#8211; name: Check Anchore vulnerabilities<br \/>\n        run: anchore-cli image vuln myapp:latest all | grep -v &#8216;OK&#8217;<br \/>\n        if: ${{ steps.CheckAnchoreVulnerabilities.outcome != &#8216;success&#8217; }}<br \/>\n      &#8211; name: Push to Docker Hub (if successful) #Replace with your Docker Hub details<br \/>\n        run: docker push docker.io\/[YOUR_DOCKERHUB_USERNAME]\/myapp:latest<br \/>\n        if: ${{ steps.CheckAnchoreVulnerabilities.outcome == &#8216;success&#8217; }}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f: \u062a\u0639\u0648\u06cc\u0636 \u06a9\u0646\u06cc\u062f [YOUR_DOCKERHUB_USERNAME] \u0628\u0627 \u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u06cc Docker Hub \u0634\u0645\u0627. \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 Anchore CLI \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0631\u0627\u0632 GitHub Actions \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f (\u062a\u062d\u062a \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0645\u062e\u0632\u0646 \u062e\u0648\u062f).<\/p>\n<p>8. \u0627\u0633\u062a\u0642\u0631\u0627\u0631 (\u0645\u062b\u0627\u0644 Minikube):<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0633\u0627\u062e\u062a \u0648 \u0627\u0633\u06a9\u0646 \u0645\u0648\u0641\u0642\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 deployment.yaml \u0641\u0627\u06cc\u0644:<\/p>\n<p>apiVersion: apps\/v1<br \/>\nkind: Deployment<br \/>\nmetadata:<br \/>\n  name: myapp-deployment<br \/>\nspec:<br \/>\n  replicas: 3<br \/>\n  selector:<br \/>\n    matchLabels:<br \/>\n      app: myapp<br \/>\n  template:<br \/>\n    metadata:<br \/>\n      labels:<br \/>\n        app: myapp<br \/>\n    spec:<br \/>\n      containers:<br \/>\n      &#8211; name: myapp-container<br \/>\n        image: docker.io\/[YOUR_DOCKERHUB_USERNAME]\/myapp:latest<br \/>\n        ports:<br \/>\n        &#8211; containerPort: 3000<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>9. \u0639\u06cc\u0628 \u06cc\u0627\u0628\u06cc:<\/p>\n<p>  \u0645\u0633\u0627\u0626\u0644 Anchore CLI: \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 CLI \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0646\u0635\u0628 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u0633\u0646\u0627\u062f Anchore \u0631\u0627 \u0628\u0631\u0627\u06cc \u0639\u06cc\u0628 \u06cc\u0627\u0628\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\n  \u062e\u0637\u0627\u0647\u0627\u06cc \u0633\u0627\u062e\u062a: Dockerfile \u0648 \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062e\u0637\u0627\u0647\u0627 \u0628\u0647 \u062f\u0642\u062a \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\n  \u062e\u0637\u0627\u0647\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631: \u062a\u0627\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f deployment.yaml \u0641\u0627\u06cc\u0644 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc Kubernetes.<br \/>\n  \u06cc\u0627\u0641\u062a\u0647 \u0647\u0627\u06cc \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc:  \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627\u06cc \u06af\u0632\u0627\u0631\u0634 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 Anchore \u0631\u0627 \u0628\u0627 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u06cc\u0627 \u0627\u0639\u0645\u0627\u0644 \u0648\u0635\u0644\u0647 \u0647\u0627 \u0628\u0631\u0637\u0631\u0641 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>10. \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631:<\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 Anchore \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f\u060c \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0645\u0627\u0646\u0646\u062f Aqua Security\u060c Snyk \u0648 Trivy \u0642\u0627\u0628\u0644\u06cc\u062a \u0647\u0627\u06cc \u0645\u0634\u0627\u0628\u0647\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u0646\u062f. \u0627\u06cc\u0646 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0647\u0627 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0646\u06cc\u0627\u0632\u0647\u0627 \u0648 \u062a\u0631\u062c\u06cc\u062d\u0627\u062a \u062e\u0648\u062f \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>11. \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc:<\/p>\n<p>\u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0627\u06cc\u0645\u0646 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f. \u0627\u062f\u063a\u0627\u0645 Anchore \u062f\u0631 \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0634\u0645\u0627 \u0628\u0631\u0627\u06cc \u062d\u0641\u0638 \u0627\u0645\u0646\u06cc\u062a \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a. \u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u06a9\u062f \u0648 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0627 \u0628\u0627 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u062e\u0627\u0635 \u062e\u0648\u062f \u062a\u0637\u0628\u06cc\u0642 \u062f\u0647\u06cc\u062f \u0648 \u0647\u0645\u06cc\u0634\u0647 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u0631\u0627 \u062f\u0631 \u0627\u0648\u0644\u0648\u06cc\u062a \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<div data-article-id=\"2023566\" id=\"article-body\">\n<p>\u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0645\u0646 \u0633\u0627\u0632\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Anchore \u0631\u0627 \u0634\u0631\u062d \u0645\u06cc \u062f\u0647\u062f.<br \/>\u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u0627\u0645\u0646\u06cc\u062a\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u06cc\u06a9 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0642\u0648\u06cc \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc \u0645\u0628\u062a\u062f\u06cc\u0627\u0646\u060c \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u062a\u0648\u0633\u0637 \u200b\u200b\u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<br \/>\u0648 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u0645\u0627 \u0633\u0627\u062e\u062a\u060c \u0622\u0632\u0645\u0627\u06cc\u0634\u060c \u0627\u0633\u06a9\u0646\u060c \u0648 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u0631\u0627 \u067e\u0648\u0634\u0634 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u062f \u0648 \u0628\u0631 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627 \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 \u0622\u0646 \u062a\u0627\u06a9\u06cc\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u062a\u0645\u0631\u06a9\u0632 Anchore \u0627\u0633\u062a\u060c \u0627\u06cc\u0646 \u0627\u0635\u0648\u0644 \u0628\u0631\u0627\u06cc \u0633\u0627\u06cc\u0631 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0645\u0627\u0646\u0646\u062f Aqua Security\u060c Snyk \u0648 Trivy \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p><strong>1. \u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u067e\u0631\u0648\u0698\u0647:<\/strong><\/p>\n<p>\u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0627\u0633\u06a9\u0646 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Anchore \u0627\u062f\u063a\u0627\u0645 \u0645\u06cc \u06a9\u0646\u062f \u062a\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f \u06a9\u0647 \u0641\u0642\u0637 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u06cc\u0645\u0646 \u0645\u0633\u062a\u0642\u0631 \u0645\u06cc \u0634\u0648\u0646\u062f.<br \/>\u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0634\u0627\u0645\u0644:<\/p>\n<ol>\n<li> <strong>\u062a\u0648\u0633\u0639\u0647 \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634:<\/strong>  \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f\u060c \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0635\u0644\u0627\u062d \u06a9\u0646\u06cc\u062f.<\/li>\n<li> <strong>\u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc:<\/strong> \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0638\u0631\u0641 Docker \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<li> <strong>\u0627\u0633\u06a9\u0646 \u0627\u0645\u0646\u06cc\u062a\u06cc:<\/strong> \u0627\u0632 Anchore \u0628\u0631\u0627\u06cc \u0627\u0633\u06a9\u0646 \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li> <strong>\u0633\u0627\u062e\u062a \u0648 \u0647\u0644 \u062f\u0627\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631:<\/strong> \u062a\u0635\u0648\u06cc\u0631 Docker \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f \u0648 \u0641\u0642\u0637 \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0646\u062c\u0627\u0645 \u0627\u0633\u06a9\u0646 \u0628\u0647 \u06cc\u06a9 \u0631\u062c\u06cc\u0633\u062a\u0631\u06cc (\u0645\u062b\u0644\u0627\u064b Docker Hub) \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/li>\n<li> <strong>\u0627\u0633\u062a\u0642\u0631\u0627\u0631:<\/strong> \u062a\u0635\u0648\u06cc\u0631 \u0627\u0645\u0646 \u0631\u0627 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0647\u062f\u0641 \u062e\u0648\u062f (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u062e\u0648\u0634\u0647 Kubernetes\u060c minikube) \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ol>\n<p><strong>2. \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc Anchore:<\/strong><\/p>\n<p>\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639\u060c \u0628\u0647 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Anchore Enterprise (\u06cc\u0627 \u06cc\u06a9 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0631\u0627\u06cc\u06af\u0627\u0646) \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f. Anchore CLI \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0631\u062f\u0647 \u0648 \u0622\u0646 \u0631\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<ol>\n<li> <strong>\u062f\u0627\u0646\u0644\u0648\u062f \u0648 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/strong> Anchore CLI \u0631\u0627 \u0627\u0632 \u0648\u0628 \u0633\u0627\u06cc\u062a \u0631\u0633\u0645\u06cc Anchore \u062f\u0627\u0646\u0644\u0648\u062f \u06a9\u0646\u06cc\u062f. \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627\u06cc \u0646\u0635\u0628 \u0628\u0633\u062a\u0647 \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0639\u0627\u0645\u0644 \u0634\u0645\u0627 \u0645\u062a\u0641\u0627\u0648\u062a \u0627\u0633\u062a.<\/li>\n<li> <strong>\u0627\u06cc\u062c\u0627\u062f \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc:<\/strong> \u0627\u06af\u0631 \u0642\u0628\u0644\u0627\u064b \u0646\u062f\u0627\u0631\u06cc\u062f \u06cc\u06a9 \u062d\u0633\u0627\u0628 Anchore \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/li>\n<li> <strong>\u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a:<\/strong> CLI \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0628\u0627 \u062d\u0633\u0627\u0628 Anchore \u062e\u0648\u062f \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0645\u0639\u0645\u0648\u0644\u0627\u064b \u0634\u0627\u0645\u0644 \u062a\u0646\u0638\u06cc\u0645 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f API \u06cc\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a Anchore \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/li>\n<li> <strong>(\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc) \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062e\u0637 \u0645\u0634\u06cc:<\/strong>  \u062f\u0631 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc Anchore\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062e\u0637\u200c\u0645\u0634\u06cc\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0639\u06cc\u06cc\u0646 \u0622\u0633\u062a\u0627\u0646\u0647\u200c\u0647\u0627\u06cc \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0633\u0637\u062d \u0634\u062f\u062a\u06cc \u0631\u0627 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0627\u0633\u06a9\u0646 \u0634\u06a9\u0633\u062a \u0645\u06cc \u062e\u0648\u0631\u062f\u060c \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0633\u06cc\u0627\u0633\u062a\u06cc \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0631 \u0635\u0648\u0631\u062a \u06cc\u0627\u0641\u062a\u0646 \u0622\u0633\u06cc\u0628\u200c\u067e\u0630\u06cc\u0631\u06cc\u200c\u0647\u0627\u06cc \u0628\u0627\u0644\u0627 \u06cc\u0627 \u062d\u06cc\u0627\u062a\u06cc\u060c \u0633\u0627\u062e\u062a \u0628\u0627 \u0634\u06a9\u0633\u062a \u0645\u0648\u0627\u062c\u0647 \u0634\u0648\u062f.<\/li>\n<\/ol>\n<p><strong>3. \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 \u0648 \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0648\u0634\u0647:<\/strong><\/p>\n<p>\u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0648 \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>project-root\/\n\u251c\u2500\u2500 Dockerfile\n\u251c\u2500\u2500 .github\/\n\u2502   \u2514\u2500\u2500 workflows\/\n\u2502       \u2514\u2500\u2500 ci.yml\n\u251c\u2500\u2500 src\/\n\u2502   \u2514\u2500\u2500 app.js\n\u2514\u2500\u2500 tests\/\n    \u2514\u2500\u2500 app.test.js\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>4. \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 (<code>src\/app.js<\/code> &#8211; Node.js):<\/strong><\/p>\n<p>\u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 Node.js Express.js:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">express<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">express<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">express<\/span><span class=\"p\">();<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">port<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">3000<\/span><span class=\"p\">;<\/span>\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"nx\">req<\/span><span class=\"p\">,<\/span> <span class=\"nx\">res<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">res<\/span><span class=\"p\">.<\/span><span class=\"nf\">send<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Hello from Day 28!<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"nx\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">listen<\/span><span class=\"p\">(<\/span><span class=\"nx\">port<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">log<\/span><span class=\"p\">(<\/span><span class=\"s2\">`App listening on port <\/span><span class=\"p\">${<\/span><span class=\"nx\">port<\/span><span class=\"p\">}<\/span><span class=\"s2\">`<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>5. \u0622\u0632\u0645\u0627\u06cc\u0634 (<code>tests\/app.test.js<\/code> &#8211; \u0647\u0633\u062a):<\/strong><\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Jest \u0628\u0631\u0627\u06cc \u062a\u0633\u062a <code>\/<\/code> \u0645\u0633\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight javascript\"><code><span class=\"kd\">const<\/span> <span class=\"nx\">request<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">supertest<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">app<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">require<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">..\/src\/app<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n\n<span class=\"nf\">describe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">GET \/<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nf\">it<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">should respond with Hello from Day 28!<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"k\">async <\/span><span class=\"p\">()<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">request<\/span><span class=\"p\">(<\/span><span class=\"nx\">app<\/span><span class=\"p\">).<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">\/<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">status<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBe<\/span><span class=\"p\">(<\/span><span class=\"mi\">200<\/span><span class=\"p\">);<\/span>\n    <span class=\"nf\">expect<\/span><span class=\"p\">(<\/span><span class=\"nx\">response<\/span><span class=\"p\">.<\/span><span class=\"nx\">text<\/span><span class=\"p\">).<\/span><span class=\"nf\">toBe<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Hello from Day 28!<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">});<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>6. Dockerfile:<\/strong><\/p>\n<p>\u0627\u06cc\u0646 \u062a\u0635\u0648\u06cc\u0631 Docker \u0631\u0627 \u0645\u06cc \u0633\u0627\u0632\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight docker\"><code><span class=\"k\">FROM<\/span><span class=\"s\"> node:14-alpine<\/span>\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/app<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> package*.json .\/<\/span>\n<span class=\"k\">RUN <\/span>npm <span class=\"nb\">install<\/span>\n<span class=\"k\">COPY<\/span><span class=\"s\"> . .<\/span>\n<span class=\"k\">USER<\/span><span class=\"s\"> node<\/span>\n<span class=\"k\">EXPOSE<\/span><span class=\"s\"> 3000<\/span>\n<span class=\"k\">CMD<\/span><span class=\"s\"> [\"node\", \"app.js\"]<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>7. \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0628\u0627 \u0627\u0642\u062f\u0627\u0645\u0627\u062a GitHub (.github\/workflows\/ci.yml):<\/strong><\/p>\n<p>\u0627\u06cc\u0646 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f \u0633\u0627\u062e\u062a\u060c \u062a\u0633\u062a \u0648 \u0627\u0633\u06a9\u0646 \u0631\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">CI\/CD with Anchore Scan<\/span>\n\n<span class=\"na\">on<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">push<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">branches<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"s\">main<\/span>\n\n<span class=\"na\">jobs<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">build<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">runs-on<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ubuntu-latest<\/span>\n    <span class=\"na\">steps<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">uses<\/span><span class=\"pi\">:<\/span> <span class=\"s\">actions\/checkout@v3<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Build Docker image<\/span>\n        <span class=\"na\">run<\/span><span class=\"pi\">:<\/span> <span class=\"s\">docker build -t myapp:latest .<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Run tests<\/span>\n        <span class=\"na\">run<\/span><span class=\"pi\">:<\/span> <span class=\"s\">npm test<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Add image to Anchore<\/span> <span class=\"c1\">#Anchore CLI must be configured (see Section 2)<\/span>\n        <span class=\"na\">run<\/span><span class=\"pi\">:<\/span> <span class=\"s\">anchore-cli image add myapp:latest<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Wait for Anchore scan<\/span>\n        <span class=\"na\">run<\/span><span class=\"pi\">:<\/span> <span class=\"s\">anchore-cli image wait myapp:latest<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Check Anchore vulnerabilities<\/span>\n        <span class=\"na\">run<\/span><span class=\"pi\">:<\/span> <span class=\"s\">anchore-cli image vuln myapp:latest all | grep -v 'OK'<\/span>\n        <span class=\"na\">if<\/span><span class=\"pi\">:<\/span> <span class=\"s\">${{ steps.CheckAnchoreVulnerabilities.outcome != 'success' }}<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Push to Docker Hub (if successful)<\/span> <span class=\"c1\">#Replace with your Docker Hub details<\/span>\n        <span class=\"na\">run<\/span><span class=\"pi\">:<\/span> <span class=\"s\">docker push docker.io\/[YOUR_DOCKERHUB_USERNAME]\/myapp:latest<\/span>\n        <span class=\"na\">if<\/span><span class=\"pi\">:<\/span> <span class=\"s\">${{ steps.CheckAnchoreVulnerabilities.outcome == 'success' }}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>\u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f<\/strong>: \u062a\u0639\u0648\u06cc\u0636 \u06a9\u0646\u06cc\u062f <code>[YOUR_DOCKERHUB_USERNAME]<\/code> \u0628\u0627 \u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631\u06cc Docker Hub \u0634\u0645\u0627. \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 Anchore CLI \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0631\u0627\u0632 GitHub Actions \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f (\u062a\u062d\u062a \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0645\u062e\u0632\u0646 \u062e\u0648\u062f).<\/p>\n<p><strong>8. \u0627\u0633\u062a\u0642\u0631\u0627\u0631 (\u0645\u062b\u0627\u0644 Minikube):<\/strong><\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0633\u0627\u062e\u062a \u0648 \u0627\u0633\u06a9\u0646 \u0645\u0648\u0641\u0642\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 <code>deployment.yaml<\/code> \u0641\u0627\u06cc\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight yaml\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">apps\/v1<\/span>\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Deployment<\/span>\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">myapp-deployment<\/span>\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\n  <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">myapp<\/span>\n  <span class=\"na\">template<\/span><span class=\"pi\">:<\/span>\n    <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\n        <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">myapp<\/span>\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\n      <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">myapp-container<\/span>\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">docker.io\/[YOUR_DOCKERHUB_USERNAME]\/myapp:latest<\/span>\n        <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3000<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>9. \u0639\u06cc\u0628 \u06cc\u0627\u0628\u06cc:<\/strong><\/p>\n<ul>\n<li>  <strong>\u0645\u0633\u0627\u0626\u0644 Anchore CLI:<\/strong> \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 CLI \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u0646\u0635\u0628 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a. \u0627\u0633\u0646\u0627\u062f Anchore \u0631\u0627 \u0628\u0631\u0627\u06cc \u0639\u06cc\u0628 \u06cc\u0627\u0628\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<li>  <strong>\u062e\u0637\u0627\u0647\u0627\u06cc \u0633\u0627\u062e\u062a:<\/strong> Dockerfile \u0648 \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062e\u0637\u0627\u0647\u0627 \u0628\u0647 \u062f\u0642\u062a \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/li>\n<li>  <strong>\u062e\u0637\u0627\u0647\u0627\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631:<\/strong> \u062a\u0627\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f <code>deployment.yaml<\/code> \u0641\u0627\u06cc\u0644 \u0648 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc Kubernetes.<\/li>\n<li>  <strong>\u06cc\u0627\u0641\u062a\u0647 \u0647\u0627\u06cc \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc:<\/strong>  \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627\u06cc \u06af\u0632\u0627\u0631\u0634 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 Anchore \u0631\u0627 \u0628\u0627 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u06cc\u0627 \u0627\u0639\u0645\u0627\u0644 \u0648\u0635\u0644\u0647 \u0647\u0627 \u0628\u0631\u0637\u0631\u0641 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<p><strong>10. \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631:<\/strong><\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 Anchore \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f\u060c \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0645\u0627\u0646\u0646\u062f Aqua Security\u060c Snyk \u0648 Trivy \u0642\u0627\u0628\u0644\u06cc\u062a \u0647\u0627\u06cc \u0645\u0634\u0627\u0628\u0647\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u0646\u062f. \u0627\u06cc\u0646 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0647\u0627 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0646\u06cc\u0627\u0632\u0647\u0627 \u0648 \u062a\u0631\u062c\u06cc\u062d\u0627\u062a \u062e\u0648\u062f \u06a9\u0627\u0648\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<p><strong>11. \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc:<\/strong><\/p>\n<p>\u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0627\u06cc\u0645\u0646 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f. \u0627\u062f\u063a\u0627\u0645 Anchore \u062f\u0631 \u062e\u0637 \u0644\u0648\u0644\u0647 CI\/CD \u0634\u0645\u0627 \u0628\u0631\u0627\u06cc \u062d\u0641\u0638 \u0627\u0645\u0646\u06cc\u062a \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a. \u0628\u0647 \u06cc\u0627\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u06a9\u062f \u0648 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0627 \u0628\u0627 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u062e\u0627\u0635 \u062e\u0648\u062f \u062a\u0637\u0628\u06cc\u0642 \u062f\u0647\u06cc\u062f \u0648 \u0647\u0645\u06cc\u0634\u0647 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0634\u06cc\u0648\u0647 \u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u0631\u0627 \u062f\u0631 \u0627\u0648\u0644\u0648\u06cc\u062a \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0645\u0646 \u0633\u0627\u0632\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Anchore \u0631\u0627 \u0634\u0631\u062d \u0645\u06cc \u062f\u0647\u062f.\u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u0627\u0645\u0646\u06cc\u062a\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u06cc\u06a9 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0627\u0645\u0646\u06cc\u062a\u06cc \u0642\u0648\u06cc \u0645\u0646\u0627\u0633\u0628 \u0628\u0631\u0627\u06cc \u0645\u0628\u062a\u062f\u06cc\u0627\u0646\u060c \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u062a\u0648\u0633\u0637 \u200b\u200b\u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.\u0648 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u0645\u0627 \u0633\u0627\u062e\u062a\u060c \u0622\u0632\u0645\u0627\u06cc\u0634\u060c &hellip;<\/p>\n","protected":false},"author":2,"featured_media":78875,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-78874","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/78874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=78874"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/78874\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/78875"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=78874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=78874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=78874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}