{"id":96065,"date":"2020-10-07T13:42:09","date_gmt":"2020-10-07T11:42:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf"},"modified":"2020-10-07T13:42:09","modified_gmt":"2020-10-07T11:42:09","slug":"problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","title":{"rendered":"A \u201eokos\u201d kont\u00e9nerk\u00e9pek tiszt\u00edt\u00e1s\u00e1nak probl\u00e9m\u00e1ja \u00e9s megold\u00e1sa a werf-ben","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"A \u201eokos\u201d kont\u00e9nerk\u00e9pek tiszt\u00edt\u00e1s\u00e1nak probl\u00e9m\u00e1ja \u00e9s megold\u00e1sa a werf-ben\" src=\"\/wp-content\/uploads\/2020\/10\/1410cea46bb8dcdc3ac06db11ed5a402.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA cikk a kont\u00e9nerk\u00e9pek tiszt\u00edt\u00e1s\u00e1nak probl\u00e9m\u00e1it t\u00e1rgyalja, amelyek a kont\u00e9nerregiszterekben (Docker Registry \u00e9s hasonl\u00f3k) halmoz\u00f3dnak fel a modern CI\/CD folyamatok val\u00f3s\u00e1g\u00e1ban, a Kubernetes-ben szolg\u00e1ltatott cloud native alkalmaz\u00e1sok eset\u00e9ben. Ismerteti a k\u00e9pek relevanci\u00e1j\u00e1nak f\u0151 krit\u00e9riumait, valamint az ezekb\u0151l sz\u00e1rmaz\u00f3 neh\u00e9zs\u00e9geket az automatiz\u00e1lt tiszt\u00edt\u00e1s, a helymegtakar\u00edt\u00e1s \u00e9s a csapatok ig\u00e9nyeinek kiel\u00e9g\u00edt\u00e9se sor\u00e1n. V\u00e9g\u00fcl egy konkr\u00e9t Open Source projekt p\u00e9ld\u00e1j\u00e1n bemutatjuk, hogyan lehet ezeket a neh\u00e9zs\u00e9geket lek\u00fczdeni.<\/p>\n<h2>Bevezet\u00e9s<\/h2>\n<p>\nA kont\u00e9nerregiszterben t\u00e1rolt k\u00e9pek sz\u00e1ma gyorsan n\u00f6vekedhet, egyre t\u00f6bb helyet foglalva el a t\u00e1rol\u00f3ban, ami ennek megfelel\u0151en jelent\u0151sen n\u00f6veli a k\u00f6lts\u00e9geit is. Az elfogadhat\u00f3 terjed\u00e9s ellen\u0151rz\u00e9s\u00e9re, korl\u00e1toz\u00e1s\u00e1ra vagy fenntart\u00e1s\u00e1ra a registry leegyszer\u0171s\u00edt\u00e9s\u00e9t szokt\u00e1k alkalmazni:<\/p>\n<ol>\n<li>r\u00f6gz\u00edtett sz\u00e1m\u00fa c\u00edmke haszn\u00e1lata a k\u00e9pekhez;<\/li>\n<li>valamilyen m\u00f3don a k\u00e9pek tiszt\u00edt\u00e1sa.<\/li>\n<\/ol>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAz els\u0151 korl\u00e1toz\u00e1s n\u00e9ha megengedett kisebb csapatok sz\u00e1m\u00e1ra. Ha a fejleszt\u0151knek elegend\u0151 a folyamatos c\u00edmk\u00e9k (<code>latest<\/code>, <code>main<\/code>, <code>teszt<\/code>, <code>boris<\/code> \u00e9s hasonl\u00f3k), a regiszter nem fog megn\u0151ni, \u00e9s hossz\u00fa id\u0151n kereszt\u00fcl egy\u00e1ltal\u00e1n nem kell gondolkodni a tiszt\u00edt\u00e1son. Mivel az \u00f6sszes elavult k\u00e9p fel\u00fcl\u00edr\u00f3dik, a tiszt\u00edt\u00e1shoz egyszer\u0171en nem marad munka (minden automatikusan a be\u00e9p\u00edtett szem\u00e9tgy\u0171jt\u0151 \u00e1ltal t\u00f6rt\u00e9nik).<\/p>\n<p>Mindazon\u00e1ltal ez a megk\u00f6zel\u00edt\u00e9s er\u0151sen korl\u00e1tozza a fejleszt\u00e9st, \u00e9s ritk\u00e1n alkalmazhat\u00f3 a modern projektek CI\/CD folyamataiban. A fejleszt\u00e9s elengedhetetlen r\u00e9sz\u00e9v\u00e9 v\u00e1lt a <strong>automatiz\u00e1l\u00e1s<\/strong>, amely lehet\u0151v\u00e9 teszi az \u00faj funkci\u00f3k sokkal gyorsabb tesztel\u00e9s\u00e9t, telep\u00edt\u00e9s\u00e9t \u00e9s felhaszn\u00e1l\u00f3khoz val\u00f3 eljuttat\u00e1s\u00e1t. P\u00e9ld\u00e1ul n\u00e1lunk minden projektben minden egyes commitn\u00e1l automatikusan l\u00e9trej\u00f6n egy CI-pipe. Ebben a k\u00e9pet \u00f6sszegy\u0171jtik, tesztelik, k\u00fcl\u00f6nb\u00f6z\u0151 Kubernetes-k\u00f6rnyezetekbe telep\u00edtik hibakeres\u00e9s \u00e9s tov\u00e1bbi ellen\u0151rz\u00e9sek c\u00e9lj\u00e1b\u00f3l, \u00e9s ha minden rendben van, a v\u00e1ltoz\u00e1sok eljutnak a v\u00e9gfelhaszn\u00e1l\u00f3hoz. Ez m\u00e1r r\u00e9gen nem rocket science, hanem a mindennapi \u00e9let r\u00e9sze sokak sz\u00e1m\u00e1ra \u2014 val\u00f3sz\u00edn\u0171leg \u00d6nnek is, hiszen ezt a cikket olvassa.<\/p>\n<p>Mivel a hib\u00e1k jav\u00edt\u00e1sa \u00e9s az \u00faj funkci\u00f3k fejleszt\u00e9se p\u00e1rhuzamosan zajlik, \u00e9s a kiad\u00e1sok ak\u00e1r naponta t\u00f6bbsz\u00f6r is v\u00e9grehajthat\u00f3k, nyilv\u00e1nval\u00f3, hogy a fejleszt\u00e9si folyamatot jelent\u0151s sz\u00e1m\u00fa commit k\u00eds\u00e9ri, teh\u00e1t \u2014 <strong>nagy sz\u00e1m\u00fa k\u00e9p a registry-ben<\/strong>Ez\u00e9rt fontos k\u00e9rd\u00e9ss\u00e9 v\u00e1lik az effekt\u00edv registry-tiszt\u00edt\u00e1s megszervez\u00e9se, azaz a nem aktu\u00e1lis k\u00e9pek t\u00f6rl\u00e9se.<\/p>\n<p>De hogyan lehet egy\u00e1ltal\u00e1n meghat\u00e1rozni, hogy aktu\u00e1lis-e egy k\u00e9p?<\/p>\n<h2>A k\u00e9p aktualit\u00e1s\u00e1nak krit\u00e9riumai<\/h2>\n<p>\nA legt\u00f6bb esetben a f\u0151 krit\u00e9riumok a k\u00f6vetkez\u0151k lesznek:<\/p>\n<p>1. Az els\u0151 (a legnyilv\u00e1nval\u00f3bb \u00e9s legkritikusabb) \u2014 azok a k\u00e9pek, amelyek <strong>jelenleg Kubernetes-ben haszn\u00e1lva vannak.<\/strong>Ezeknek a k\u00e9peknek a t\u00f6rl\u00e9se komoly vesztes\u00e9geket okozhat a production le\u00e1ll\u00e1sa miatt (p\u00e9ld\u00e1ul, ezek a k\u00e9pek sz\u00fcks\u00e9gesek lehetnek a replik\u00e1ci\u00f3 sor\u00e1n), vagy teljesen kudarcba vihetik azt a csapat er\u0151fesz\u00edt\u00e9st, amely a hibakeres\u00e9s\u00e9rt felel\u0151s valamelyik k\u00f6rnyezetben. <i>(Ez\u00e9rt k\u00e9sz\u00edtett\u00fcnk egy k\u00fcl\u00f6n <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/k8s-image-availability-exporter\"><i>Prometheus exporter<\/i><\/a><\/noindex><i>, amely figyeli az ilyen k\u00e9pek hi\u00e1ny\u00e1t b\u00e1rmely Kubernetes klaszterben.)<\/i><\/p>\n<p>2. A m\u00e1sodik (kev\u00e9sb\u00e9 nyilv\u00e1nval\u00f3, de szint\u00e9n nagyon fontos \u00e9s \u00fajra az \u00fczemeltet\u00e9st\u0151l f\u00fcgg) \u2014 azok a k\u00e9pek, amelyek <strong>sz\u00fcks\u00e9gesek a vissza\u00e1ll\u00edt\u00e1shoz, ha komoly probl\u00e9m\u00e1k mer\u00fclnek fel<\/strong> a jelenlegi verzi\u00f3ban. P\u00e9ld\u00e1ul a Helm eset\u00e9ben ezek a k\u00e9pek, amelyek a mentett verzi\u00f3kban haszn\u00e1latosak. (Egy\u00e9bk\u00e9nt alap\u00e9rtelmez\u00e9s szerint a Helm korl\u00e1toz\u00e1sa 256 rev\u00edzi\u00f3, de ki az, aki val\u00f3j\u00e1ban sz\u00fcks\u00e9gesnek \u00e9rzi <i>annyi<\/i> verzi\u00f3t meg\u0151rizni?..) V\u00e9g\u00fcl is, pontosan az\u00e9rt t\u00e1rolunk verzi\u00f3kat, hogy k\u00e9s\u0151bb fel lehessen haszn\u00e1lni \u0151ket, azaz \"vissza lehessen \u00e1llni\" r\u00e1juk, ha sz\u00fcks\u00e9ges.<\/p>\n<p>3. A harmadik \u2014 <strong>a fejleszt\u0151k ig\u00e9nyei<\/strong>: minden k\u00e9p, amely \u00f6sszef\u00fcgg a jelenlegi munk\u00e1jukkal. P\u00e9ld\u00e1ul, ha egy PR-t n\u00e9z\u00fcnk, \u00e9rdemes meg\u0151rizni azt a k\u00e9pet, amely megfelel az utols\u00f3 commitnak \u00e9s, mondjuk, az el\u0151z\u0151 commitnak: \u00edgy a fejleszt\u0151 gyorsan vissza tud t\u00e9rni b\u00e1rmely feladathoz, \u00e9s dolgozhat az utols\u00f3 m\u00f3dos\u00edt\u00e1sokkal. <\/p>\n<p>4. A negyedik \u2014 azok a k\u00e9pek, amelyek <strong>az alkalmaz\u00e1sunk verzi\u00f3inak felelnek meg<\/strong>, azaz v\u00e9gs\u0151 term\u00e9kk\u00e9nt l\u00e9teznek: v1.0.0, 20.04.01, sierra stb.<\/p>\n<p>NB: A fent eml\u00edtett krit\u00e9riumokat sz\u00e1mos fejleszt\u0151csapattal val\u00f3 tapasztalat alapj\u00e1n fogalmaztuk meg k\u00fcl\u00f6nb\u00f6z\u0151 c\u00e9gekb\u0151l. Azonban term\u00e9szetesen a fejleszt\u00e9si folyamatok \u00e9s az haszn\u00e1lt infrastrukt\u00fara jellemz\u0151i (p\u00e9ld\u00e1ul ha nem haszn\u00e1lnak Kuberenetes-t) szerint ezek a krit\u00e9riumok elt\u00e9rhetnek. <\/p>\n<h2>A krit\u00e9riumok megfelel\u00e9se \u00e9s a megl\u00e9v\u0151 megold\u00e1sok<\/h2>\n<p>\nA n\u00e9pszer\u0171 container registry szolg\u00e1ltat\u00e1sok \u00e1ltal\u00e1ban saj\u00e1t k\u00e9pm\u00falt \u00e9rdektelens\u00e9gi politik\u00e1jukat aj\u00e1nlj\u00e1k: ezek \u00e1ltal megadhat\u00f3k azok a felt\u00e9telek, amelyek mellett a c\u00edmke t\u00f6rl\u00e9sre ker\u00fcl a registry-b\u0151l. Azonban ezeknek a felt\u00e9teleknek a lehet\u0151s\u00e9geit olyan param\u00e9terek korl\u00e1tozz\u00e1k, mint a nevek, a l\u00e9trehoz\u00e1s ideje \u00e9s a c\u00edmk\u00e9k sz\u00e1ma*.<\/p>\n<p><i>* F\u00fcgg a konkr\u00e9t container registry megval\u00f3s\u00edt\u00e1sokt\u00f3l. Az al\u00e1bbi megold\u00e1sok lehet\u0151s\u00e9geit vizsg\u00e1ltuk: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Container Registry, Harbor Registry, JFrog Artifactory, Quay.io \u2014 2020 szeptemberi \u00e1llapot szerint.<\/i><\/p>\n<p>Ez a param\u00e9terek sora elegend\u0151 ahhoz, hogy eleget tegy\u00fcnk a negyedik krit\u00e9riumnak \u2013 azaz k\u00e9pesek legy\u00fcnk a verzi\u00f3knak megfelel\u0151 k\u00e9pek kiv\u00e1laszt\u00e1s\u00e1ra. Azonban minden m\u00e1s krit\u00e9rium eset\u00e9ben valamilyen kompromisszumos megold\u00e1st kell v\u00e1lasztani (szigor\u00fabb vagy \u00e9ppen ellenkez\u0151leg, enged\u00e9keny politik\u00e1t) az elv\u00e1r\u00e1sok \u00e9s a p\u00e9nz\u00fcgyi lehet\u0151s\u00e9gek f\u00fcggv\u00e9ny\u00e9ben.<\/p>\n<p>P\u00e9ld\u00e1ul a harmadik krit\u00e9rium \u2013 a fejleszt\u0151k ig\u00e9nyeivel kapcsolatos \u2013 a csapatokon bel\u00fcli folyamatok megszervez\u00e9s\u00e9vel oldhat\u00f3 meg: k\u00e9pek specifikus elnevez\u00e9se, k\u00fcl\u00f6n enged\u00e9lyez\u00e9si list\u00e1k vezet\u00e9se \u00e9s bels\u0151 meg\u00e1llapod\u00e1sok. De v\u00e9gs\u0151 soron ezt is automatiz\u00e1lni kell. Ha pedig a megl\u00e9v\u0151 megold\u00e1sok nem elegend\u0151ek, valami saj\u00e1tot kell k\u00e9sz\u00edteni.<\/p>\n<p>Hasonl\u00f3 a helyzet az els\u0151 k\u00e9t krit\u00e9riummal: ezeket nem lehet teljes\u00edteni an\u00e9lk\u00fcl, hogy adatokat kapn\u00e1nk egy k\u00fcls\u0151 rendszerb\u0151l \u2013 abb\u00f3l, ahol az alkalmaz\u00e1sok telep\u00edt\u00e9se t\u00f6rt\u00e9nik (a mi eset\u00fcnkben ez a Kubernetes).<\/p>\n<h3>A workflow illusztr\u00e1ci\u00f3ja a Git-ben<\/h3>\n<p>\nTegy\u00fck fel, hogy k\u00f6r\u00fclbel\u00fcl \u00edgy dolgozik a Git-ben:<\/p>\n<p><img decoding=\"async\" alt=\"A \u201eokos\u201d kont\u00e9nerk\u00e9pek tiszt\u00edt\u00e1s\u00e1nak probl\u00e9m\u00e1ja \u00e9s megold\u00e1sa a werf-ben\" src=\"\/wp-content\/uploads\/2020\/10\/45c9bfb6755da1b4d6be05b51ab17429.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>A diagramon a fej ikonnal jel\u00f6lten vannak azok a kont\u00e9ner k\u00e9pek, amelyeket jelenleg Kubernetes-ben telep\u00edtettek k\u00fcl\u00f6nb\u00f6z\u0151 felhaszn\u00e1l\u00f3k (v\u00e9gfelhaszn\u00e1l\u00f3k, tesztel\u0151k, menedzserek stb.) vagy amelyeket a fejleszt\u0151k hibajav\u00edt\u00e1sra \u00e9s hasonl\u00f3 c\u00e9lokra haszn\u00e1lnak.<\/i><\/p>\n<p>Mi fog t\u00f6rt\u00e9nni, ha a megtakar\u00edt\u00e1si politik\u00e1k csak a megadott c\u00edmk\u00e9k alapj\u00e1n enged\u00e9lyezik a k\u00e9pek megtart\u00e1s\u00e1t (nem t\u00f6rl\u00e9s\u00e9t) <b>a megadott c\u00edmk\u00e9k alapj\u00e1n<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"A \u201eokos\u201d kont\u00e9nerk\u00e9pek tiszt\u00edt\u00e1s\u00e1nak probl\u00e9m\u00e1ja \u00e9s megold\u00e1sa a werf-ben\" src=\"\/wp-content\/uploads\/2020\/10\/e57ff24cb818799d28e8eb006aea2eb5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNyilv\u00e1nval\u00f3, hogy egy ilyen forgat\u00f3k\u00f6nyv senkinek sem lesz kedv\u00e9re.<\/p>\n<p>Mi v\u00e1ltozik, ha a politik\u00e1k engedik, hogy ne t\u00f6r\u00f6lj\u00fck a k\u00e9peket <b>a megadott id\u0151intervallum \/ az utols\u00f3 elk\u00f6telez\u00e9sek sz\u00e1m\u00e1nak megfelel\u0151en<\/b>?<\/p>\n<p><img decoding=\"async\" alt=\"A \u201eokos\u201d kont\u00e9nerk\u00e9pek tiszt\u00edt\u00e1s\u00e1nak probl\u00e9m\u00e1ja \u00e9s megold\u00e1sa a werf-ben\" src=\"\/wp-content\/uploads\/2020\/10\/7743581e6e64affb0a207ee156c00f6e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz eredm\u00e9ny sokkal jobb lett, azonban m\u00e9g mindig messze van az ide\u00e1lt\u00f3l. V\u00e9g\u00fcl is a fejleszt\u0151knek tov\u00e1bbra is sz\u00fcks\u00e9g\u00fck van k\u00e9pekre a registry-ben (vagy ak\u00e1r a K8s-ben telep\u00edtve) a hib\u00e1k jav\u00edt\u00e1s\u00e1hoz...<\/p>\n<p>\u00d6sszefoglalva a piacon kialakult helyzetet: a kont\u00e9nernyilv\u00e1ntart\u00e1sokban el\u00e9rhet\u0151 funkci\u00f3k nem ny\u00fajtanak elegend\u0151 rugalmass\u00e1got a takar\u00edt\u00e1shoz, ennek f\u0151 oka pedig az, hogy <strong>nincs lehet\u0151s\u00e9g a k\u00fcls\u0151 vil\u00e1ggal val\u00f3 interakci\u00f3ra<\/strong>. \u00cdgy azok a csapatok, akiknek ilyen rugalmass\u00e1gra van sz\u00fcks\u00e9g\u00fck, k\u00e9nytelenek maguk megoldani a k\u00e9pek t\u00f6rl\u00e9s\u00e9t \"k\u00edv\u00fclr\u0151l\" a Docker Registry API (vagy a megfelel\u0151 implement\u00e1ci\u00f3 nat\u00edv API-ja) haszn\u00e1lat\u00e1val.<\/p>\n<p>Mindazon\u00e1ltal egy \u00e1ltal\u00e1nos megold\u00e1st kerest\u00fcnk, amely automatiz\u00e1ln\u00e1 a k\u00e9pek t\u00f6rl\u00e9s\u00e9t k\u00fcl\u00f6nb\u00f6z\u0151 csapatok sz\u00e1m\u00e1ra, amelyek k\u00fcl\u00f6nb\u00f6z\u0151 nyilv\u00e1ntart\u00e1sokat haszn\u00e1lnak\u2026<\/p>\n<h2>Utunk az egyetemes k\u00e9ptakar\u00edt\u00e1shoz<\/h2>\n<p>\nHonnan sz\u00e1rmazik ez a sz\u00fcks\u00e9glet? Az a helyzet, hogy mi nem egy k\u00fcl\u00f6n\u00e1ll\u00f3 fejleszt\u0151csoport vagyunk, hanem egy csapat, amely sz\u00e1mos ilyen csoportot szolg\u00e1l ki, seg\u00edtve az integr\u00e1lt CI\/CD probl\u00e9m\u00e1k megold\u00e1s\u00e1t. Ehhez a f\u0151 technikai eszk\u00f6z\u00fcnk a ny\u00edlt forr\u00e1sk\u00f3d\u00fa seg\u00e9deszk\u00f6z, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.werf.io\/\">werf<\/a><\/noindex>. A l\u00e9nyege, hogy nem egyetlen funkci\u00f3t l\u00e1t el, hanem k\u00eds\u00e9ri a folyamatos sz\u00e1ll\u00edt\u00e1s folyamatait minden szakaszban: a buildt\u0151l a deployig.<\/p>\n<p>A k\u00e9pek nyilv\u00e1ntart\u00e1sban val\u00f3 k\u00f6zz\u00e9t\u00e9tele (azaz a build ut\u00e1n) nyilv\u00e1nval\u00f3 funkci\u00f3ja egy ilyen eszk\u00f6znek. Mivel a k\u00e9pek t\u00e1rol\u00e1sra ker\u00fclnek, ha a t\u00e1rol\u00f3ja nem korl\u00e1tlan, akkor a k\u00e9s\u0151bbi t\u00f6rl\u00e9s\u00fck\u00e9rt is felel\u0151snek kell lennie. Arr\u00f3l, hogy hogyan \u00e9rt\u00fck el ezt a sikert az \u00f6sszes megadott krit\u00e9rium teljes\u00edt\u00e9se mellett, majd besz\u00e1molunk.<\/p>\n<p><i>* B\u00e1r a nyilv\u00e1ntart\u00e1sok k\u00fcl\u00f6nb\u00f6z\u0151ek lehetnek (Docker Registry, GitLab Container Registry, Harbor stb.), felhaszn\u00e1l\u00f3ik ugyanazokkal a probl\u00e9m\u00e1kkal tal\u00e1lkoznak. Az egyetemes megold\u00e1s a mi eset\u00fcnkben f\u00fcggetlen a nyilv\u00e1ntart\u00e1s implement\u00e1ci\u00f3j\u00e1t\u00f3l, mivel azokon k\u00edv\u00fcl val\u00f3sul meg, \u00e9s az \u00f6sszes sz\u00e1m\u00e1ra azonos m\u0171k\u00f6d\u00e9st k\u00edn\u00e1l.<\/i><\/p>\n<p>B\u00e1r a werf-et haszn\u00e1ljuk p\u00e9lda implement\u00e1ci\u00f3k\u00e9nt, rem\u00e9lj\u00fck, hogy a haszn\u00e1lt megk\u00f6zel\u00edt\u00e9sek m\u00e1s csapatok sz\u00e1m\u00e1ra is hasznosak lesznek, akik hasonl\u00f3 neh\u00e9zs\u00e9gekkel k\u00fczdenek.<\/p>\n<p>Teh\u00e1t elkezdt\u00fck <i>a<\/i> k\u00e9pek t\u00f6rl\u00e9s\u00e9nek megval\u00f3s\u00edt\u00e1s\u00e1t \u2014 a kont\u00e9nernyilv\u00e1ntart\u00e1sokban m\u00e1r be\u00e9p\u00edtett lehet\u0151s\u00e9gek helyett. Az els\u0151 l\u00e9p\u00e9s a Docker Registry API haszn\u00e1lata volt, hogy l\u00e9trehozzuk a fent eml\u00edtett egyszer\u0171 politik\u00e1kat a c\u00edmk\u00e9k sz\u00e1m\u00e1r\u00f3l \u00e9s azok l\u00e9trehoz\u00e1s\u00e1nak idej\u00e9r\u0151l. Ezen k\u00edv\u00fcl hozz\u00e1adtunk egy <strong>enged\u00e9lyez\u00e9si list\u00e1t a telep\u00edtett infrastrukt\u00far\u00e1ban haszn\u00e1lt k\u00e9pek alapj\u00e1n<\/strong>, azaz Kubernetes. Az ut\u00f3bbihoz elegend\u0151 volt a Kubernetes API-n kereszt\u00fcl v\u00e9gigj\u00e1rni az \u00f6sszes telep\u00edtett er\u0151forr\u00e1st \u00e9s list\u00e1zni az \u00e9rt\u00e9keket. <code>k\u00e9p<\/code>.<\/p>\n<p>Ez a trivi\u00e1lis megold\u00e1s lez\u00e1rta a legkritikusabb probl\u00e9m\u00e1t (1. krit\u00e9rium), de csak a tiszt\u00edt\u00e1si mechanizmus fejleszt\u00e9s\u00e9nek kezdet\u00e9t jelentette. A k\u00f6vetkez\u0151 \u2014 \u00e9s l\u00e9nyegesen \u00e9rdekesebb \u2014 l\u00e9p\u00e9s a megold\u00e1s volt <strong>a k\u00f6zz\u00e9tett k\u00e9pek \u00f6sszekapcsol\u00e1sa a Git-t\u00f6rt\u00e9nettel.<\/strong>.<\/p>\n<h3>C\u00edmk\u00e9z\u00e9si s\u00e9m\u00e1k<\/h3>\n<p>\nKezdetben olyan megk\u00f6zel\u00edt\u00e9st v\u00e1lasztottunk, ahol a v\u00e9gs\u0151 k\u00e9pnek t\u00e1rolnia kellett a tiszt\u00edt\u00e1shoz sz\u00fcks\u00e9ges inform\u00e1ci\u00f3kat, \u00e9s a c\u00edmk\u00e9z\u00e9si s\u00e9m\u00e1kra \u00e9p\u00edtett\u00fck a folyamatot. A k\u00e9p k\u00f6zz\u00e9t\u00e9telekor a felhaszn\u00e1l\u00f3 egy adott c\u00edmk\u00e9z\u00e9si lehet\u0151s\u00e9get v\u00e1lasztott (<code>git-branch<\/code>, <code>git-commit<\/code> vagy <code>git-tag<\/code>) \u00e9s az ennek megfelel\u0151 \u00e9rt\u00e9ket haszn\u00e1lta. A CI-rendszerekben ezeknek az \u00e9rt\u00e9keknek a be\u00e1ll\u00edt\u00e1sa automatikusan t\u00f6rt\u00e9nt a k\u00f6rnyezeti v\u00e1ltoz\u00f3k alapj\u00e1n. L\u00e9nyeg\u00e9ben <strong>a v\u00e9gs\u0151 k\u00e9p \u00f6sszekapcsol\u00f3dott egy adott Git-primit\u00edvvel,<\/strong>meg\u0151rizve a tiszt\u00edt\u00e1shoz sz\u00fcks\u00e9ges adatokat c\u00edmk\u00e9kben.<\/p>\n<p>Ez a megk\u00f6zel\u00edt\u00e9s egy olyan politik\u00e1k sorozat\u00e1t eredm\u00e9nyezte, amely lehet\u0151v\u00e9 tette, hogy a Git az egyetlen igazs\u00e1gforr\u00e1sk\u00e9nt m\u0171k\u00f6dj\u00f6n:<\/p>\n<ul>\n<li>A Git \u00e1gon\/c\u00edmk\u00e9n t\u00f6rt\u00e9n\u0151 t\u00f6rl\u00e9s\u00e9vel automatikusan t\u00f6rl\u0151dtek a kapcsol\u00f3d\u00f3 k\u00e9pek is a registry-b\u0151l.<\/li>\n<li>A Git-c\u00edmk\u00e9khez \u00e9s commitokhoz kapcsol\u00f3d\u00f3 k\u00e9pek sz\u00e1m\u00e1t a kiv\u00e1lasztott s\u00e9ma alapj\u00e1n haszn\u00e1lt c\u00edmk\u00e9k sz\u00e1m\u00e1val \u00e9s a kapcsol\u00f3d\u00f3 commit l\u00e9trehoz\u00e1s\u00e1nak idej\u00e9vel szab\u00e1lyozhattuk.<\/li>\n<\/ul>\n<p>\n\u00d6sszess\u00e9g\u00e9ben a megval\u00f3s\u00edt\u00e1s kiel\u00e9g\u00edtette a sz\u00fcks\u00e9gleteinket, de hamarosan \u00faj kih\u00edv\u00e1s v\u00e1rt r\u00e1nk. Az a helyzet, hogy a Git-primit\u00edvokon alapul\u00f3 c\u00edmk\u00e9z\u00e9si s\u00e9m\u00e1k haszn\u00e1lata sor\u00e1n sz\u00e1mos h\u00e1tr\u00e1nyba \u00fctk\u00f6zt\u00fcnk. <i>(Mivel a le\u00edr\u00e1suk t\u00fall\u00e9p a cikk keretein, minden \u00e9rdekl\u0151d\u0151 megismerkedhet a r\u00e9szletekkel; <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\"><i>itt<\/i><\/a><\/noindex><i>.)<\/i> Ez\u00e9rt, amikor \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy \u00e1tt\u00e9r\u00fcnk egy hat\u00e9konyabb c\u00edmk\u00e9z\u00e9si megk\u00f6zel\u00edt\u00e9sre (tartalomalap\u00fa c\u00edmk\u00e9z\u00e9s), \u00e1t kellett gondolnunk a k\u00e9pek tiszt\u00edt\u00e1s\u00e1nak megval\u00f3s\u00edt\u00e1s\u00e1t is.<\/p>\n<h3>\u00daj algoritmus<\/h3>\n<p>\nMi\u00e9rt? A tartalomalap\u00fa c\u00edmk\u00e9z\u00e9s keretein bel\u00fcl minden c\u00edmke megfelelhet t\u00f6bb Git commitnak. A k\u00e9pek tiszt\u00edt\u00e1sakor t\u00f6bb\u00e9 nem lehet <i>a f\u0151 DB p\u00e9ld\u00e1nyhoz<\/i> a commitb\u00f3l kiindulni, amelyre az \u00faj c\u00edmk\u00e9t a registry-be hozz\u00e1adt\u00e1k.<\/p>\n<p>Az \u00faj tiszt\u00edt\u00e1si algoritmushoz \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy elhagyjuk a c\u00edmk\u00e9z\u00e9si s\u00e9m\u00e1kat, \u00e9s <strong>a meta-k\u00e9pek alapj\u00e1n \u00e9p\u00edtj\u00fck fel a folyamatot,<\/strong>mindegyik t\u00e1rol egy p\u00e1rost az al\u00e1bbiak szerint:<\/p>\n<ul>\n<li>a k\u00f6telez\u0151 elk\u00f6telez\u0151d\u00e9s, amelyen a k\u00f6zz\u00e9t\u00e9tel t\u00f6rt\u00e9nt (f\u00fcggetlen\u00fcl att\u00f3l, hogy \u00faj k\u00e9p ker\u00fclt hozz\u00e1ad\u00e1sra, m\u00f3dosult, vagy v\u00e1ltozatlan maradt a t\u00e1rol\u00f3ban);<\/li>\n<li>\u00e9s a bels\u0151 azonos\u00edt\u00f3nk, amely a l\u00e9trehozott k\u00e9pet jel\u00f6li.<\/li>\n<\/ul>\n<p>\nM\u00e1s szavakkal, biztos\u00edtva volt <strong>a k\u00f6zz\u00e9tett tagek \u00e9s a Git elk\u00f6telez\u0151d\u00e9sek k\u00f6z\u00f6tti kapcsolatot<\/strong>.<\/p>\n<h3>A v\u00e9gs\u0151 konfigur\u00e1ci\u00f3 \u00e9s \u00e1ltal\u00e1nos algoritmus<\/h3>\n<p>\nA felhaszn\u00e1l\u00f3k sz\u00e1m\u00e1ra, a tiszt\u00edt\u00e1s konfigur\u00e1l\u00e1sakor el\u00e9rhet\u0151k lettek a politik\u00e1k, amelyek meghat\u00e1rozz\u00e1k az aktu\u00e1lis k\u00e9pek kiv\u00e1laszt\u00e1s\u00e1t. Minden ilyen politika a k\u00f6vetkez\u0151k \u00e1ltal van meghat\u00e1rozva:<\/p>\n<ul>\n<li>t\u00f6bb referenci\u00e1b\u00f3l, azaz Git-tagekb\u0151l vagy Git-\u00e1gakb\u00f3l, amelyek a szkennel\u00e9s sor\u00e1n haszn\u00e1latosak;<\/li>\n<li>\u00e9s a keresett k\u00e9pek korl\u00e1tja minden referencia eset\u00e9n.<\/li>\n<\/ul>\n<p>\nIllusztr\u00e1ci\u00f3k\u00e9nt \u2014 n\u00e9zd meg, hogyan n\u00e9zett ki a konfigur\u00e1ci\u00f3 alap\u00e9rtelmezett politik\u00e1i:<\/p>\n<pre><code class=\"plaintext\">cleanup:\n  keepPolicies:\n  - references:\n      tag: \\\/.*\\\/\n      limit:\n        last: 10\n  - references:\n      branch: \\\/.*\\\/\n      limit:\n        last: 10\n        in: 168h\n        operator: And\n    imagesPerReference:\n      last: 2\n      in: 168h\n      operator: And\n  - references:  \n      branch: \\\/^(main|staging|production)$\\\/\n    imagesPerReference:\n      last: 10\n<\/code><\/pre>\n<p>\nEz a konfigur\u00e1ci\u00f3 h\u00e1rom politik\u00e1t tartalmaz, amelyek a k\u00f6vetkez\u0151 szab\u00e1lyoknak felelnek meg:<\/p>\n<ol>\n<li>Meg\u0151rizni a legutols\u00f3 10 Git-taget (a c\u00edmke l\u00e9trehoz\u00e1s\u00e1nak d\u00e1tuma szerint).<\/li>\n<li>Maxim\u00e1lisan 2 k\u00e9pet tartani az utols\u00f3 h\u00e9ten k\u00f6zz\u00e9tett k\u00e9pekb\u0151l, legfeljebb 10 \u00e1gon, amelyek az utols\u00f3 h\u00e9ten akt\u00edvak.<\/li>\n<li>Meg\u0151rizni 10 k\u00e9pet az \u00e1gak sz\u00e1m\u00e1ra <code>main<\/code>, <code>staging<\/code> \u00e9s <code>production<\/code>.<\/li>\n<\/ol>\n<p>\nA v\u00e9gs\u0151 algoritmus a k\u00f6vetkez\u0151 l\u00e9p\u00e9sekre reduk\u00e1l\u00f3dik:<\/p>\n<ul>\n<li>Mennyis\u00e9gek beszerz\u00e9se a t\u00e1rol\u00f3b\u00f3l.<\/li>\n<li>Kiz\u00e1rni a Kubernetesben haszn\u00e1lt k\u00e9peket, mivel ezeket m\u00e1r el\u0151re kiv\u00e1lasztottuk a K8s API megk\u00e9rdez\u00e9s\u00e9vel.<\/li>\n<li>A Git-t\u00f6rt\u00e9net szkennel\u00e9se \u00e9s a k\u00e9pek kiz\u00e1r\u00e1sa a megadott politik\u00e1k szerint.<\/li>\n<li>A megmaradt k\u00e9pek elt\u00e1vol\u00edt\u00e1sa.<\/li>\n<\/ul>\n<p>\nVisszat\u00e9rve az illusztr\u00e1ci\u00f3nkhoz, \u00edgy fest a werf:<\/p>\n<p><img decoding=\"async\" alt=\"A \u201eokos\u201d kont\u00e9nerk\u00e9pek tiszt\u00edt\u00e1s\u00e1nak probl\u00e9m\u00e1ja \u00e9s megold\u00e1sa a werf-ben\" src=\"\/wp-content\/uploads\/2020\/10\/c453092dca23860a0dda604843845507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nB\u00e1r, ha nem haszn\u00e1lod a werfet, ez a fejlett k\u00e9ptiszt\u00edt\u00e1si megk\u00f6zel\u00edt\u00e9s \u2014 b\u00e1rmilyen megval\u00f3s\u00edt\u00e1sban (a k\u00e9pek c\u00edmk\u00e9z\u00e9s\u00e9nek prefer\u00e1lt megk\u00f6zel\u00edt\u00e9se szerint) \u2014 alkalmazhat\u00f3 m\u00e1s rendszerekben\/j\u00f3v\u00e1hagy\u00e1sokban is. Csak annyit kell megjegyezni a felmer\u00fcl\u0151 probl\u00e9m\u00e1kr\u00f3l, \u00e9s megtal\u00e1lni azokat a lehet\u0151s\u00e9geket a te rendszeredben, amelyek be\u00e9p\u00edtik a megold\u00e1sokat a lehet\u0151 legsim\u00e1bban. Rem\u00e9lj\u00fck, hogy a megtett \u00fatunk seg\u00edt \u00faj r\u00e9szletekkel \u00e9s gondolatokkal megvizsg\u00e1lni a te esetet is.<\/p>\n<h2>Z\u00e1r\u00e1s<\/h2>\n<p><\/p>\n<ul>\n<li>El\u0151bb vagy ut\u00f3bb a legt\u00f6bb csapat szembes\u00fcl a registry t\u00falcsordul\u00e1s\u00e1nak probl\u00e9m\u00e1j\u00e1val. <\/li>\n<li>A megold\u00e1sok keres\u00e9sekor els\u0151 l\u00e9p\u00e9sk\u00e9nt meg kell hat\u00e1rozni a k\u00e9p relevanci\u00e1j\u00e1nak krit\u00e9riumait.<\/li>\n<li>A n\u00e9pszer\u0171 container registry szolg\u00e1ltat\u00e1sok \u00e1ltal k\u00edn\u00e1lt eszk\u00f6z\u00f6k lehet\u0151v\u00e9 teszik egy nagyon egyszer\u0171 tiszt\u00edt\u00e1s megszervez\u00e9s\u00e9t, amely nem veszi figyelembe a \u201ek\u00fcls\u0151 vil\u00e1got\u201d: a Kubernetesben haszn\u00e1lt k\u00e9peket \u00e9s a csapat munkafolyamatainak saj\u00e1toss\u00e1gait.<\/li>\n<li>A rugalmas \u00e9s hat\u00e9kony algoritmusnak tiszt\u00e1ban kell lennie a CI\/CD folyamatokkal, \u00e9s nem csak a Docker k\u00e9pekkel kell oper\u00e1lnia.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S.<\/h2>\n<p>\nOlvasson tov\u00e1bbi inform\u00e1ci\u00f3kat a blogunkban:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/495112\/\">Tartalom alap\u00fa c\u00edmk\u00e9z\u00e9s a werf build rendszer\u00e9ben: mi\u00e9rt \u00e9s hogyan m\u0171k\u00f6dik ez?<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476646\/\">3-way merge a werf-ben: telep\u00edt\u00e9s Kubernetesre Helm \u201eszteroidokkal\u201d<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465131\/\">Monorepo \u00e9s multirepo t\u00e1mogat\u00e1s a werf-ben, \u00e9s mi k\u00f6ze a Docker Registryhez<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/493170\/\">A werf 1.1-es verzi\u00f3ja: fejleszt\u00e9sek a build rendszerben ma \u00e9s j\u00f6v\u0151beni tervek<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/522024\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 (Docker Registry \u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u0445) \u0432 \u0440\u0435\u0430\u043b\u0438\u044f\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 CI\/CD-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0434\u043b\u044f cloud native-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0432 Kubernetes. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":96066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-96065","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u00ab\u0443\u043c\u043d\u043e\u0439\u00bb \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u0435\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 werf | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-07T11:42:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-07T11:42:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47A \u201eokos\u201d kont\u00e9nerk\u00e9pek tiszt\u00edt\u00e1s\u00e1nak probl\u00e9m\u00e1ja \u00e9s megold\u00e1sa a werf-ben | ProHoster","description":"A cikk bemutat\u00e1sra ker\u00fclt.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u00ab\u0443\u043c\u043d\u043e\u0439\u00bb \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0438 \u0435\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 werf | ProHoster","og:description":"\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/problema-umnoj-ochistki-obrazov-kontejnerov-i-eyo-reshenie-v-werf","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-07T11:42:09+00:00","article:modified_time":"2020-10-07T11:42:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"96065","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:52:24","updated":"2022-10-01 08:58:07","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/96065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=96065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/96065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/96066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=96065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=96065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=96065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}