Pull-through-välimuistit
Pull-through-välimuisti on peili yhdestä julkisesta rekisteristä, omassa tenantissasi, ja se täyttyy tarpeen mukaan. Haet kuvan sen kautta sen sijaan, että hakisit sen julkisesta rekisteristä; ensimmäinen haku noutaa kuvan lähderekisteristä ja säilyttää kopion, ja myöhemmät saman kuvan haut palvellaan tuosta kopiosta.
Se on hyödyllinen, kun julkinen rekisteri alkaa rajoittaa hakujasi, kun koontiputki hakee samoja peruskuvia koko päivän, tai kun haluat työkuormiesi ottavan yhteyden yhteen osoitteeseen — registry.sweden.frostmoln.cloud — sekä omien kuviesi että niiden julkisten kuvien osalta, joista olet riippuvainen.
Yksi välimuisti peilaa yhtä lähderekisteriä. Jos haet kuvia GitHub Container Registrystä, Docker Hubista ja Quaystä, se on kolme välimuistia, joilla kullakin on oma nimiavaruutensa ja oma pull-polkunsa. Muuta säädettävää kuin lähderekisterin valinta ei ole.
Rekisterisi on ensin otettava käyttöön
Välimuisti sijaitsee rekisterissäsi, joten ota rekisteri käyttöön ennen välimuistin luomista. Jos et ole tehnyt sitä, välimuistin luonti hylätään.
Mitä lähderekistereitä voit peilata
Frostmoln tarjoaa kiinteän listan julkisia rekistereitä — valitset yhden siltä listalta, et omaa URL-osoitetta. Tätä kirjoitettaessa listalla ovat Docker Hub, GitHub Container Registry, Quay, Kubernetes-rekisteri, Microsoft Container Registry ja Amazon ECR Public.
Lue nykyinen lista portaalista tai CLI:stä, älä tästä
Listan tarjoaa API, joten portaalin valitsin ja fm registry cache list näyttävät aina täsmälleen sen, mitä tänään on tarjolla, ja fm registry cache create täydentää avaimet samasta palvelimen listasta — joten sinun ei tarvitse muistaa niitä eikä pitää omaa kopiota. Luota niihin; yllä olevat nimet ovat esimerkkejä ja voivat vanhentua. Poistettua lähderekisteriä ei enää tarjota uusille välimuisteille — jo olemassa oleva välimuisti toimii edelleen ja on yhä poistettavissa.
Docker Hub vaatii omat Docker Hub -tunnuksesi
Docker Hub -välimuisti hylätään, ellet anna Docker Hubin käyttäjänimeä ja salasanaa (henkilökohtainen käyttöoikeustunniste käy, ja on parempi valinta).
Tämä ei ole mielivaltainen sääntö. Välimuisti, joka hakee Docker Hubista nimettömästi, kuluttaa nimetöntä kiintiötä, joka jaetaan muiden Frostmoln-asiakkaiden kanssa samassa lähtevässä osoitteessa. Yksi vilkas nimetön peili käyttää sen loppuun, ja kaikki muut saman osoitteen takana olevat asiakkaat alkavat törmätä nopeusrajoituksiin — hauissa, joilla ei ole mitään tekemistä sinun välimuistisi kanssa. Omien tunnusten antaminen siirtää haut sinun Docker Hub -tilillesi ja omaan kiintiöösi, mikä on myös ainoa tapa saada välimuistillesi ne rajat, joista maksat Dockerille.
Muut lähderekisterit eivät tänään vaadi tunnuksia, mutta voit silti antaa ne — esimerkiksi päästäksesi yksityiseen repositoryyn, johon sinulla on oikeus.
Mitkä lähderekisterit vaativat tunnukset, näkyy siellä missä luot välimuistin
Portaali merkitsee ne, ja CLI huomauttaa, jos jätät ne pois. Säännön valvoo API, joten CLI ja Terraform kohtaavat saman hylkäyksen kuin portaali.
Luo välimuisti
Portaalissa: avaa Konttirekisteri, etsi sen Pull-through-välimuistit-osio ja valitse Lisää välimuisti. Valitse lähderekisteri, anna tunnukset jos niitä pyydetään, ja luo se. Lähderekisteri, jolle sinulla jo on välimuisti, näkyy harmaana eikä piilotettuna — yksi välimuisti lähderekisteriä kohden. Uuden välimuistin pull-polku näkyy sen rivillä; kopioi se valitsemalla polku tai sen vieressä oleva kopiointikuvake.
CLI:stä:
fm registry cache list # mitä sinulla on, ja mitä on tarjolla
fm registry cache create ghcr
fm registry cache delete ghcr # --force ohittaa vahvistuksenTunnuksia vaativa lähderekisteri ottaa ne vastaan kahdella turvallisella tavalla. Päätteessä: anna käyttäjänimi ja anna komennon kysyä salasana — sitä ei kaiuteta, eikä se päädy koskaan komentohistoriaasi:
fm registry cache create dockerhub --username acmeCI:ssä, jossa kysymystä ei ole, syötät salasanan vakiosyötteeseen:
printf '%s' "$DOCKERHUB_TOKEN" | fm registry cache create dockerhub \
--username acme --password-stdinKäytä printf '%s'-komentoa äläkä echoa, siitä syystä joka on selitetty kohdassa Kirjautuminen — echo runtelee jotkin arvot hiljaisesti, ja runneltu lähdetunniste epäonnistuu rikkinäisenä hakuna eikä vääränä salasanana.
Lisäksi on valitsin --password. Pidä sitä viimeisenä keinona: arvo näkyy jaetun koneen ps-listassa ja jää komentohistoriaasi, joten suosi jompaakumpaa yllä olevista tavoista. Ei-interaktiivinen ajo ilman salasanaa ei ole ansa — komento epäonnistuu ja nimeää --password-stdin sen sijaan, että jäisi jumiin.
Terraformilla:
resource "frostmoln_container_registry_cache" "ghcr" {
upstream = "ghcr"
depends_on = [frostmoln_container_registry.this]
}
resource "frostmoln_container_registry_cache" "dockerhub" {
upstream = "dockerhub"
username = var.dockerhub_username
password = var.dockerhub_token # arkaluonteinen — katso varoitus alla
depends_on = [frostmoln_container_registry.this]
}Lähderekisterin salasana kirjoitetaan Terraformin tilaan
Terraform säilyttää jokaisen antamasi arvon, joten Docker Hub -tunnisteesi päätyy tilaan — selväkielisenä JSON-tiedostona työhakemistoosi, ellet ole määrittänyt etätaustaa. Rekisterisivun varoitus pätee tässä täysimääräisesti: käytä salattua etätaustaa, pidä terraform.tfstate* poissa gitistä, ja ota arvo muuttujasta sen sijaan, että kirjoittaisit sen .tf-tiedostoon.
Käytit mitä pintaa tahansa, saat takaisin välimuistin pull-polun. Se on ainoa asia, jota tarvitset jatkossa.
Tunnuksia ei tarkisteta välimuistia luotaessa
Frostmoln ei testaa niitä lähderekisteriä vastaan, joten kirjoitusvirhe ei epäonnistu tässä — se epäonnistuu myöhemmin hakuna, joka ei saa kuvaa. Jos välimuisti ei koskaan palvele mitään, epäile ensin tunnuksia.
Hae kuvia välimuistin kautta
Laita välimuistin pull-polku lähdepalvelimen tilalle kuvan eteen, ja säilytä viittauksen loppuosa täsmälleen ennallaan.
Kuva, jonka normaalisti hakisit näin:
ghcr.io/acme/widget:1.2.3on nyt:
registry.sweden.frostmoln.cloud/t-3f2a9c1e4b7d4a2f8e1c5d6b7a8f9e0d-cache-ghcr/acme/widget:1.2.3Oma pull-polkusi näkyy portaalissa ja komennossa fm registry cache list; yllä oleva osa t-...-cache-ghcr on esimerkki.
Käytä samaa tunnusta, jota jo käytät omille kuvillesi. docker login on palvelinkohtainen, ja välimuisti on samalla palvelimella kuin nimiavaruutesi, joten yksi kirjautuminen kattaa molemmat. Et luo välimuistia varten mitään uutta — jo hallussasi olevat tunnukset laajennetaan siihen automaattisesti, kun se luodaan.
# Kirjaudu kerran (yksinkertaiset lainausmerkit käyttäjänimen ympärille — siinä on $)
docker login registry.sweden.frostmoln.cloud -u 'robot$t-...-a1b2c3d4'
# Hae välimuistin kautta
docker pull \
registry.sweden.frostmoln.cloud/t-3f2a9c1e4b7d4a2f8e1c5d6b7a8f9e0d-cache-ghcr/acme/widget:1.2.3Pull-tunnus riittää. podman ottaa samat komennot.
Docker Hubin viralliset kuvat säilyttävät library/-etuliitteensä
docker pull nginx toimii, koska Docker-asiakasohjelma laajentaa sen muotoon docker.io/library/nginx. Täällä mikään ei laajenna sitä puolestasi, joten Docker Hub -välimuistin kautta viittaus on registry.sweden.frostmoln.cloud/<valimuistisi-nimiavaruus>/library/nginx:1.27. Jos jätät library/-osan pois, saat "not found" -virheen, joka näyttää rikkinäiseltä välimuistilta.
Hallitusta Kubernetes-klusterista
Mitään uutta ei tarvita. Välimuisti on samalla palvelimella kuin rekisterisi, joten jo olemassa oleva image pull secret kattaa sen — muutat vain kuvaviittauksen:
spec:
imagePullSecrets:
- name: frostmoln-registry
containers:
- name: my-app
image: registry.sweden.frostmoln.cloud/t-3f2a9c1e4b7d4a2f8e1c5d6b7a8f9e0d-cache-ghcr/acme/widget:1.2.3Jos sinulla ei vielä ole tuota Secretiä, rakenna se täsmälleen kuten omille kuvillesi — katso Kuvien hakeminen hallitusta Kubernetes-klusterista, mukaan lukien huomautus siitä, että klusterin VPC tarvitsee gatewayn lähtevää liikennettä varten.
Tunnisteet, :latest ja kuinka ajantasainen välimuisti on
Tunnisteella tehty haku kysyy lähderekisteriltä joka kerta, kun välimuisti tavoittaa sen. Aina kun haet acme/widget:1.2.3- tai acme/widget:latest-kuvan välimuistin kautta, välimuisti kysyy ensin lähderekisteriltä, mihin kuvaan tunniste osoittaa juuri nyt, ja antaa sinulle sen — jo välimuistissa olevan kopion, jos mikään ei ole muuttunut, muuten uuden kuvan, jonka se sitten säilyttää. Mitään välimuistin voimassaoloaikaa ei tarvitse odottaa: :latest välimuistin kautta seuraa lähderekisteriä sillä hetkellä, kun haet.
Kun lähderekisteri ilmoittaa, ettei tunnistetta enää ole, haku sillä tunnisteella epäonnistuu, vaikka välimuistissa olisi yhä kopio. Kun tunniste poistetaan lähderekisteristä, se poistuu myös välimuistin kautta tehtäviltä hauilta.
Kun välimuisti ei saa vastausta lähderekisteriltä — se ei ole tavoitettavissa tai se torjuu tarkistuksen nopeusrajoitusvastauksella — saamasi tulos riippuu kuvasta:
- Yhden alustan kuva, joka haetaan tunnisteella, palvellaan välimuistista — vaikka tunniste olisi sittemmin siirtynyt lähderekisterissä. Haku onnistuu, eikä mikään kerro sinulle, että kuva voi olla vanhentunut.
- Monialustaisen kuvan haku tunnisteella Dockerilla epäonnistuu. Useimmat julkiset kuvat ovat monialustaisia (yksi tunniste kattaa alustat
linux/amd64,linux/arm64ja niin edelleen), eikä välimuisti säilytä niitä tunnisteen alla — katso Monialustaiset kuvat alempana — joten tunnisteen alla ei ole mitään, mihin turvautua. - Haku sellaisen kuvan digestillä, joka välimuistissa on — yhden alustan kuvan tai monialustaisen kuvan yhden alustan — palvellaan välimuistista, vastasipa lähderekisteri tai ei.
Kiinnitä alustakohtainen digest, jotta haut toimivat lähderekisterin katkon aikana
Monialustaisen kuvan kohdalla digest, jonka docker pull tulostaa, samoin kuin docker inspect -komennon RepoDigests-kentässä näkyvä digest, on indeksin eli alustaluettelon digest. Välimuisti ei säilytä tätä indeksiä sellaisenaan, joten haku sillä digestillä edellyttää, että lähderekisteri vastaa. Kiinnitä sen sijaan ajamasi alustakohtaisen kuvan digest:
image: <pull-polku>/acme/widget@sha256:<linux/amd64-digest>Löydät sen listaamalla lähderekisterissä olevan kuvan alustat — alustakohtaiset digestit ovat samat lähderekisterissä ja välimuistissa:
docker buildx imagetools inspect ghcr.io/acme/widget:1.2.3
docker manifest inspect ghcr.io/acme/widget:1.2.3 # sama JSON-muodossaOhita merkinnät, joiden alusta on unknown/unknown — ne ovat koontien attestaatioita, eivät kuvia. Hae kiinnitetty viittaus kerran välimuistin kautta, jotta se on välimuistissa, ja jatka sen hakemista: kuten mikä tahansa muu kuva, kuva, jota kukaan ei hae 7 päivään, poistetaan.
Kuvat, joita kukaan ei hae, poistetaan. Kuva, jota ei ole haettu välimuistin kautta 7 päivään, poistetaan siitä seuraavassa päivittäisessä tarkistuksessa. Seuraava haku noutaa sen taas lähderekisteristä, kunhan lähderekisteri vastaa — ja se estää välimuistia pitämästä kiinni tallennustilasta kuville, joiden käytön olet lopettanut.
Monialustaiset kuvat
Kun haet monialustaisen kuvan välimuistin kautta Dockerilla, Docker noutaa ensin indeksin sen tunnisteella ja sitten sen yhden alustakohtaisen kuvan, jota se tarvitsee, tuon kuvan digestillä. Välimuisti tallentaa sen, mitä siltä pyydettiin:
- Hakemasi alustakohtainen kuva — esimerkiksi
linux/amd64— omalla digestillään, ilman tunnistetta, koska se noudettiin digestillä. - Pian sen jälkeen välimuistin oma indeksi, joka listaa tähän mennessä välimuistin kautta haetut alustat. Silläkään ei ole tunnistetta, eikä sen digest ole koskaan lähderekisterin digest: välimuisti rakentaa tämän indeksin itse, joten sen digest on eri silloinkin, kun kaikki alustat on haettu.
Välimuistia selatessasi näet siis tämän: ensin alustakohtaisen kuvan ja, kun välimuistin oma indeksi on olemassa, sen tilalla tuon indeksin — ilman tunnistetta ja digestillä, joka ei vastaa lähderekisterin digestiä eikä RepoDigests-arvoa. Kuvassa ei ole mitään vikaa, ja tunnisteella tehdyt haut toimivat edelleen niin kauan kuin lähderekisteri vastaa: välimuisti kysyy lähderekisteriltä nykyisen indeksin joka kerta, kuten yllä on kuvattu.
Selatessa näkyvä digest on välimuistin oma, eikä sitä ole tarkoitettu kiinnitettäväksi. Jos haluat kiinnittää alustakohtaisen kuvan, ota sen digest lähderekisteristä yllä olevan vinkin mukaisesti.
Katso, mitä välimuisti sisältää
Valitse portaalissa Selaa välimuistin rivillä Pull-through-välimuistit-osiossa. Näet välimuistin sisältämät repositoriot ja kunkin niistä kuvat: tunnisteet, digestin, koon, milloin välimuisti nouti kuvan ja milloin se on viimeksi haettu. Valitse tunniste tai sen vieressä oleva kopiointikuvake kopioidaksesi koko viittauksen, jolla kuva haetaan välimuistin kautta. Dockerilla haettu monialustainen kuva näkyy ilman tunnistetta ja omalla digestillään — katso Monialustaiset kuvat.
CLI:ssä nimeät välimuistin lähderekisterin avaimella, kuten kaikkialla muuallakin:
fm registry cache repository list ghcr
fm registry cache image list ghcr acme/widget
fm registry cache image list ghcr acme/widget --all -o jsonRepositorioiden nimet ovat lähderekisterin omia — acme/widget tai Docker Hub -välimuistin kautta library/nginx — ilman välimuistin nimiavaruutta edessä.
Poista kuvia välimuistista
Voit poistaa yksittäisen kuvan välimuistista poistamatta välimuistia. Paina portaalissa kuvan rivillä Poista. CLI:stä:
fm registry cache image delete ghcr acme/widget sha256:1b0c8dd1...
fm registry cache image delete ghcr acme/widget sha256:1b0c8dd1... --forceSe ottaa digestin, ei koskaan tunnistetta, samasta syystä kuin omien kuviesi poistaminen: tunniste voi siirtyä listauksen ja poiston välissä. Kaikki kuvan tunnisteet lähtevät mukana, ja moniarkkitehtuurinen kuva poistetaan indeksinsä kautta, ei alustakohtaisten osiensa kautta.
Poisto ei ole pysyvä. Kaikki välimuistissa on kopio jostakin, joka on yhä lähderekisterissä, joten seuraava kuvan haku yksinkertaisesti noutaa sen uudelleen. Poista kuva, kun haluat vapauttaa tilaa heti etkä odottaa, että se vanhenee pois. Se ei estä ketään hakemasta kuvaa — jos haluat estää haut välimuistin kautta, poista välimuisti.
Poistaminen ei anna sinulle tuoreempaa kuvaa
Tunnisteella tehty haku kysyy lähderekisteriltä joka kerta, joten vanhentunutta kopiota ei ole poistettavana niin kauan kuin lähderekisteri vastaa. Ja kun lähderekisteriin ei saada yhteyttä tai se rajoittaa hakujasi, välimuistissa oleva kopio yhden alustan kuvasta tai kiinnitetystä alustakohtaisesta digestistä on ainoa, minkä haku voi saada — jos poistat sen silloin, kuvan haut epäonnistuvat, kunnes lähderekisteri vastaa taas.
Välimuistiin tallennetut kuvat lasketaan tallennusrajaasi
Yksi raja, jaettuna omien kuviesi kanssa — ja välimuisti täyttää itsensä
Kaikki, mitä välimuisti tallentaa, lasketaan samaa tallennusrajaa vastaan kuin oma nimiavaruutesi. Koko rekisterillesi on yksi luku ja yksi raja: kuvasi ja jokainen omistamasi välimuisti.
Välimuisti täyttyy haettaessa, ei pushatessa. Se voi siis kuluttaa rajasi ilman että pushaat koskaan mitään — ja se tekee niin tavallisen docker pull -komennon sivuvaikutuksena, ajoi sen sitten putki, klusteri tai kollega. Jopa pyyntö, joka pyytää vain manifestin, käynnistää kuvan täyden haun.
Käytännön seuraus: vilkkaan julkisen rekisterin edessä oleva välimuisti voi täyttää rajasi ihan itsekseen, ja ensimmäinen merkki siitä on, että omien kuviesi push hylätään, koska tilaa ei ole jäljellä.
Seuraa tallennuslukua portaalissa kohdassa Käytetty tallennustila tai komennolla fm registry status sen jälkeen, kun olet lisännyt välimuistin — se on yhteissumma, joten se liikkuu välimuistin täyttyessä. Kunkin välimuistin oma luku näkyy Pull-through-välimuistit-osion Tallennustila-sarakkeessa. Se laskee jokaisen tallennetun kerroksen kerran kyseisen välimuistin sisällä, joten se kertoo, mikä välimuisti on täyttymässä — ei hakemiesi kuvien kokojen summaa.
Jos tila on loppumassa, nopeinta on yleensä poistaa välimuisti, jonka kautta et enää hae — katso Poista välimuisti — tai poistaa säilyttämästäsi välimuistista kuvat, joita et enää tarvitse. Kumpikaan ei maksa sinulle mitään pysyvää. Omien kuvien poistaminen käydään läpi kohdassa Tilan vapauttaminen.
Lähdetunnusten vaihtaminen
Niitä ei voi päivittää. Tunnukset ovat vain kirjoitettavia: mikään ei lue niitä takaisin, eikä muutettavaa kenttää ole. Kun haluat kierrättää Docker Hub -tunnisteen tai korjata väärin kirjoitetun, poista välimuisti ja luo se uudelleen uusilla arvoilla.
Se ei ole niin raskasta kuin miltä kuulostaa — menetät välimuistiin tallennetut kopiot, ja seuraava haku noutaa ne uudelleen. Pull-polku johdetaan tenantistasi ja lähderekisteristä, joten se palaa täsmälleen samana eikä mitään siihen viittaavaa tarvitse muuttaa.
Poista välimuisti
Portaalissa: poista rivi Konttirekisteri-sivun Pull-through-välimuistit-osiosta. CLI:stä:
fm registry cache delete ghcr
fm registry cache delete ghcr --force # sama, ilman vahvistustaPoisto ottaa lähderekisterin avaimen — saman lyhyen nimen, jolla loit sen — ja juuri sen portaalirivi ja fm registry cache list näyttävät.
Välimuistin poistaminen poistaa myös sen tallentamat kuvat, eikä se kysy kahdesti. Se on turvallista tavalla, jolla omien kuvien poistaminen ei ole: kaikki välimuistissa on kopio jostakin, joka on yhä lähderekisterissä, joten mikään tekemäsi ei katoa. Luo välimuisti uudelleen, hae uudelleen, ja sisältö palaa.
Kaksi asiaa muuttuu välittömästi:
- Tallennettujen tavujen lukusi laskee sitä mukaa kun välimuistin sisältö poistuu. Se on koko tarkoitus, jos poistit vapauttaaksesi tilaa.
- Kaikki, mikä yhä hakee sen polun kautta, alkaa epäonnistua. Käy läpi manifestisi, Helm-arvosi ja putkitiedostosi pull-polun varalta ennen kuin poistat käytössä olevan välimuistin.
Tallennetut lähdetunnukset poistuvat mukana. Jos poistat välimuistin vaihtaaksesi ne, pidä uusi käyttäjänimi ja tunniste valmiina ennen kuin aloitat.
Kuinka monta välimuistia voit pitää
Tenantillasi voi olla kerrallaan rajallinen määrä välimuisteja. Rajan yli menevä luonti hylätään, ja ratkaisu on poistaa välimuisti, jonka kautta et enää hae.
Lue luku sieltä, missä luot välimuistin
Portaali näyttää rajan ja lakkaa tarjoamasta Lisää välimuisti -toimintoa, kun saavutat sen, ja fm registry cache list raportoi sen sen rinnalla, mitä sinulla on. Tuo luku tulee API:sta ja on se, joka pätee — tämä sivu ei tarkoituksella kirjoita mitään lukua, jottei se voisi hiljaa vanhentua.
Kun välimuistia ei voi luoda
| Mitä näet | Mitä se tarkoittaa |
|---|---|
| Lähderekisteriä ei voi peilata | Se ei ole tarjotulla listalla, tai se on poistettu sen jälkeen kun kirjoitit skriptisi. Lue nykyinen lista ja valitse sieltä. |
| Tämä lähderekisteri vaatii tunnukset | Docker Hub, tänään. Anna oma käyttäjänimesi ja tunnisteesi — katso yllä. |
| Sinulla on jo välimuisti tälle lähderekisterille | Yksi välimuisti lähderekisteriä kohden, eikä päivitettävää ole. Poista se ja luo uudelleen, jos vaihdat tunnuksia. |
| Olet saavuttanut rajan | Poista välimuisti, jonka kautta et enää hae. |
| Rekisteriäsi ei ole otettu käyttöön | Ota se ensin käyttöön. |
Myös keskeytetty rekisteri kieltäytyy luomasta välimuistia, kuten se kieltäytyy jokaisesta muustakin kirjoituksesta. Haut jo olemassa olevien välimuistien kautta jatkuvat, jo hallussasi olevilla pull-tunnuksilla — aivan kuten omien kuviesi kohdalla. Katso Jos rekisterisi on keskeytetty.