Skip to content

Konttirekisteri ​

Konttirekisteri antaa tenantillesi yksityisen OCI-rekisterin konttikuvillesi, ylläpidettynä EU:ssa. Kuvat säilytetään yksinomaan EU:ssa ja ETA-alueella eivätkä ne ole koskaan julkisia. Kaikki OCI-asiakasohjelmat toimivat — docker, podman, CI-suoritin tai Kubernetes-klusteri, joka hakee kuvia image pull secretin avulla.

Rekisterin osoite on registry.sweden.frostmoln.cloud.

Push ja pull menevät suoraan tuohon osoitteeseen tunnuksella, jonka luot täällä. Ne eivät kulje Frostmolnin API:n kautta, joten koontiputkesi ei tarvitse tietää alustan API:sta mitään.

Ota rekisteri käyttöön ​

Rekisteri vaatii nimenomaisen käyttöönoton. Käyttöönotto luo nimiavaruutesi ja siihen liittyvän laskutettavan tallennustilan — pelkkä oikeus käyttää palvelua ei luo rekisteriä.

Siirry portaalissa kohtaan Konttirekisteri ja valitse Ota konttirekisteri käyttöön.

bash
fm registry enable
fm registry status      # minne pushaat ja onko rekisteri käytössä

Mitään ei voi määrittää luontivaiheessa: nimiavaruutesi johdetaan tenant-tunnuksestasi, joten pyyntö ei voisi sisältää mitään, mikä muuttaisi sitä. Käyttöönoton ajaminen uudelleen CLI:n tai Terraformin kautta jo käytössä olevalle tenantille ei ole virhe — se raportoi nykyisen tilan ja päättyy koodilla 0, joten se on turvallinen provisiointiskriptissä. (API itse vastaa siinä 409; CLI ja Terraform-tarjoaja käsittelevät sen.)

Käyttöönottoa ei voi perua, ja tenantin sulkeminen tuhoaa kuvasi

Poistotoimintoa ei ole portaalissa, CLI:ssä eikä API:ssa. Ainoa tapa poistaa rekisteri on sulkea tenant, ja se tuhoaa pysyvästi jokaisen siinä olevan kuvan. Käsittele käyttöönottoa kertaluonteisena ja ota yhteyttä tukeen, jos rekisteri pitää poistaa.

Lue Mitä tapahtuu, kun suljet tenantin alta ennen sulkemista — vientiin on 30 päivän ikkuna, ja se on ainoa mahdollisuus.

Nimiavaruutesi ja kuvaviittaukset ​

Nimiavaruutesi on t- ja sen perässä tenant-tunnuksesi ilman väliviivoja — esimerkiksi t-3f2a9c1e4b7d4a2f8e1c5d6b7a8f9e0d. Jokainen kuvaviittaus on muotoa:

registry.sweden.frostmoln.cloud/<nimiavaruutesi>/<kuva>:<tunniste>

Nimiavaruus johdetaan muuttumattomasta tenant-tunnuksestasi, ei tenantin nimestä. Tenantin uudelleennimeäminen ei muuta sitä, joten Dockerfileen, Helm-charttiin tai deployment-manifestiin jo kiinnitetyt kuvaviittaukset pysyvät voimassa.

Portaali näyttää tarkan nimiavaruutesi kohdassa Minne pushaat, ja CLI tulostaa sen:

bash
fm registry status

Tunnukset ​

Tunnus on käyttäjätunnus ja salasana, joilla kirjaudut sisään komennolla docker login. Luo tunnus portaalissa kohdassa Tunnukset → Luo tunnus tai CLI:llä:

bash
fm registry credential create --name ci-pipeline          # vain pull (oletus)
fm registry credential create --name ci-pipeline --capability push
fm registry credential list
fm registry credential get <id>
fm registry credential delete <id>                        # peruuttaa (kysyy ensin)
fm registry credential delete <id> --force                # sama, ilman kysymystä
  • Nimi on oma nimilappusi — se ei ole osa käyttäjätunnusta. Nimeä jokainen tunnus sen mukaan, mikä yksittäinen käyttäjä sitä pitää hallussaan. Koska tunnusta ei voi rajata yhteen repositorioon, nimilappu on ainoa asia, joka myöhemmin kertoo mikä tunnus vuoti ja mikä lakkaa toimimasta kun peruutat sen.
  • Käyttöoikeus on pull (oletus) tai push. Push sisältää pullin. Luo pull, ellei kyseinen käyttäjä todella julkaise kuvia — push-tunnus voi korvata minkä tahansa olemassa olevan tunnisteen nimiavaruudessasi, myös sellaisen, johon tuotantomanifestisi jo viittaavat.
  • Käyttäjätunnuksessa on etuliite robot$, esimerkiksi robot$t-3f2a9c1e4b7d4a2f8e1c5d6b7a8f9e0d-a1b2c3d4.
  • Yksi tunnus toimii kaikissa tenantisi omistamissa nimiavaruuksissa, koska docker login tehdään palvelinkohtaisesti. Tunnusta ei voi rajata yhteen repositorioon, joten minkä tahansa tunnuksen vaikutusalue on koko nimiavaruutesi.
  • Tunnukset eivät vanhene eikä niitä voi kierrättää paikallaan — peruuta ja luo uusia harkitusti: kun joku lähtee, kun CI-järjestelmä vaihdetaan tai oman aikataulusi mukaan.
  • Niitä voi olla enintään 20 kerrallaan; sen ylittävä luonti estetään, ja ratkaisu on peruuttaa jokin tunnus, jota et enää käytä.
  • Peruuttaminen astuu voimaan välittömästi kaiken sen osalta, mikä kirjautuu uudelleen: tunnus ei voi enää tunnistautua, ilman siirtymäaikaa, joten sitä käyttävä putki tai klusteri alkaa heti epäonnistua. Istunto, jolla jo on rekisteritunniste, voi käyttää tuon tunnisteen lyhyen eliniän loppuun, joten peruuttaminen on hillinnän alku, ei sen kokonaisuus.

Salasana näytetään vain kerran

Salasana näytetään vain luontihetkellä. Frostmoln eikä rekisteri säilytä siitä noudettavaa kopiota, eikä kiertotoimintoa ole. Ota se heti talteen ja vie se Salaisuuksiin tai omaan salaisuuksien hallintaasi.

Pidä se poissa lähdekoodista, CI-lokeista, Dockerfilen ARG/ENV-määrityksistä ja --build-arg-arvoista (jotka kaikki jäävät kuvakerroksiin ja kuvahistoriaan), tavallisista Kubernetes-manifesteista, tukipyynnöistä ja keskusteluista sekä leikepöytähistoriastasi.

Jos menetät sen, ainoa keino on peruuttaa tunnus ja luoda uusi. Jos se sen sijaan vuotaa, katso Jos tunnus vuotaa.

Kirjautuminen ​

Päätteellä anna dockerin kysyä salasana — se pitää sen poissa komentohistoriasta ja prosessiluettelosta:

bash
docker login registry.sweden.frostmoln.cloud -u 'robot$t-...-a1b2c3d4'

Lainausmerkitse käyttäjätunnus komentotulkissa

Käyttäjätunnus sisältää $-merkin. bash- ja zsh-tulkeissa lainausmerkitsemätön robot$t-... laajenee pois ja kirjautuminen estyy, jolloin täysin toimiva tunnus näyttää rikkinäiseltä. Käytä aina yksinkertaisia lainausmerkkejä.

CI-ympäristössä, jossa kysymystä ei voi esittää, syötä salasana stdiniin — älä koskaan valitsimella -p/--password, joka jättää sen prosessiargumentteihin jaetulla suorittimella:

bash
printf '%s' "$REGISTRY_PASSWORD" | docker login registry.sweden.frostmoln.cloud \
  -u 'robot$t-...-a1b2c3d4' --password-stdin

Käytä printf '%s' äläkä echo-komentoa — echo tulkitsee kenoviivasarjat zsh-tulkissa ja syö alun -n/-e bash-tulkissa, ja kumpikin sotkee huomaamatta salasanan, jota et voi lukea uudelleen.

Ota $REGISTRY_PASSWORD suorittimesi peitetystä salaisuusmekanismista, ja varmista ettei vaihe aja set -x -tilassa: komentojen jäljitys laajentaa muuttujan ja tulostaa salasanan koontilokiin, jonne peittäminen ei välttämättä yllä.

docker login tallentaa tunnuksen levylle

Se kirjoittaa tiedostoon ~/.docker/config.json, base64-koodattuna, ei salattuna, ellet ole määrittänyt credential helperiä (docker-credential-osxkeychain, pass, secretservice). Tiedosto päätyy helposti koontikontekstiin, varmuuskopioon tai synkronoituun dotfile-repoon. Määritä helper työasemalla, ja aja docker logout registry.sweden.frostmoln.cloud, kun olet valmis. podman kirjoittaa sen sijaan tiedostoon $XDG_RUNTIME_DIR/containers/auth.json — podman logout tyhjentää sen.

Itse ylläpidetyllä tai muuten pitkäikäisellä CI-suorittimella credential helperiä ei yleensä ole, ja tiedosto jäisi elämään työn jälkeen, jolloin seuraava työ voi lukea sen. Anna jokaiselle työlle oma asetushakemisto ja poista se lopuksi:

bash
export DOCKER_CONFIG="$(mktemp -d)"
# ... kirjaudu, koosta, pushaa ...
docker logout registry.sweden.frostmoln.cloud; rm -rf "$DOCKER_CONFIG"

Uuden salasanan vieminen salaisuusvarastoon ​

Oletusmuotoinen taulukkotuloste tulostaa salasanan jo päätteellesi, ja valitsimella -o json CLI antaa sen peittämättömänä — juuri se sallii sen putkittamisen ilman että se koskaan näkyy komentorivillä:

bash
fm registry credential create --name ci -o json | jq -j .secret

Käytä jq -j, älä jq -r: -r lisää loppuun rivinvaihdon, ja varasto joka säilyttää sen antaa sinulle salasanan, joka epäonnistuu jokaisessa kirjautumisessa — ilman toista kopiota vertailtavaksi.

Mikään fm secrets -komento ei lue arvoa stdinistä (fm secrets create ottaa vain --value, mikä palauttaisi salasanan komentoriville), joten lähetä se portaalin lomakkeeseen Salaisuudet → Luo tai hallintaan, jonka CLI lukee stdiniä:

bash
set -o pipefail
fm registry credential create --name ci -o json | jq -j .secret \
  | vault kv put secret/frostmoln/registry password=-

set -o pipefail on tässä olennainen: ilman sitä ketju päättyy koodilla 0 vaikka jokin aiempi vaihe epäonnistuisi, ja suljet päätteen uskoen kertakäyttöisen salasanan tallentuneen. Lue arvo takaisin ja vertaa ennen kuin suljet sen päätteen — tämä on ainoa hetki, jolloin se on vielä mahdollista. Huomaa että vault kv put korvaa polun kaikki avaimet, joten käytä vault kv patch (tai erillistä polkua), jos tallennat sinne myös käyttäjätunnuksen.

Käytit mitä kohdetta tahansa: älä ohjaa tätä tiedostoon, älä aja sitä set -x -tilassa äläkä CI-työssä, joka kaiuttaa komennot. Salasana on peittämätön, ja se on lisäksi päätteesi vierityspuskurissa ja istuntolokissa — tyhjennä ne, kun olet valmis.

Jos tunnus vuotaa ​

  1. Peruuta se — fm registry credential delete <id> tai Peruuta portaalissa. Sillä ei enää onnistu yksikään kirjautuminen.
  2. Luo korvaava tunnus ja päivitä jokainen käyttäjä, jolla vanha oli. Jos klusteri hakee sillä External Secrets Operatorin kautta, pakota päivitys tai poista synkronoitu Secret — muuten se käyttää kuollutta tunnusta seuraavaan päivitysväliin asti.
  3. Selvitä mitä muuta samassa paikassa oli. Jos se vuoti tiedoston ~/.docker/config.json, Terraformin tilan, koontilokin tai synkronoidun dotfile-repon kautta, jokainen muu tunnus samassa artefaktissa vuoti mukana.
  4. Arvioi vahinko käyttöoikeuden mukaan.
    • Push-tunnus on voinut korvata minkä tahansa tunnisteen nimiavaruudessasi. Vertaa manifestiesi kiinnittämiä digestejä komennon docker manifest inspect <ref> tulokseen; poikkeama on korvaus. Voit poistaa syntyneet kuvat itse — ks. Tilan vapauttaminen — mutta huomaa, että korvatun tunnisteen poistaminen poistaa NYKYISEN sisällön, joten pushaa uudelleen se digest johon luotat sen sijaan, että poistaisit itsesi takaisin siihen.
    • Pull-tunnus tarkoittaa, että kaikki nimiavaruudessasi oli luettavissa, eikä peruuttaminen kumoa lukemista. Oleta, että kaikki sinne koskaan pushattu on viety, myös kuvakerroksiin leivotut salaisuudet.

Frostmoln ei voi kertoa, käytettiinkö vuotanutta tunnusta — rekisterille ei ole asiakkaalle näkyvää käyttölokia — joten etukäteen kirjaamasi digestit ovat ainoa todisteesi. Se on käytännön syy kiinnittää digestiin.

Keskeytettyä rekisteriä ei voi eristää

Kun rekisterisi on keskeytetty, sekä peruuttaminen että luonti torjutaan. Vuotanut tunnus pysyy elossa etkä voi korvata sitä. Ota välittömästi yhteyttä tukeen sen sijaan, että kävisit yllä olevat vaiheet läpi.

Koska mikään ei vanhene eikä mitään voi kierrättää paikallaan, tämä on myös rutiini, jonka ajat aikataulun mukaan, et vain häiriön jälkeen.

Kuvan pushaaminen ja hakeminen ​

bash
# 1. Kirjaudu sisään (lainausmerkitse käyttäjätunnus — se sisältää $-merkin)
docker login registry.sweden.frostmoln.cloud -u 'robot$t-...-a1b2c3d4'

# 2. Merkitse kuva nimiavaruuteesi
docker tag my-app:latest \
  registry.sweden.frostmoln.cloud/t-3f2a9c1e4b7d4a2f8e1c5d6b7a8f9e0d/my-app:1.0.0

# 3. Pushaa
docker push \
  registry.sweden.frostmoln.cloud/t-3f2a9c1e4b7d4a2f8e1c5d6b7a8f9e0d/my-app:1.0.0

# 4. Hae se takaisin missä tahansa, missä on tunnus
docker pull \
  registry.sweden.frostmoln.cloud/t-3f2a9c1e4b7d4a2f8e1c5d6b7a8f9e0d/my-app:1.0.0

podman käyttää samoja komentoja. Vaiheeseen 4 riittää pull-tunnus; vaihe 3 vaatii push-oikeuden.

Kuvien hakeminen hallitusta Kubernetes-klusterista ​

Kubernetes tunnistautuu yksityiseen rekisteriin image pull secretillä — se on tyypin kubernetes.io/dockerconfigjson Secret. Luo tunnus valitsimella --capability pull ja anna klusterille oma sen sijaan, että jakaisit CI-tunnuksesi, jolloin kumman tahansa peruuttaminen ei riko toista.

Hakeva työkuorma tarvitsee lisäksi ulospäin suuntautuvan internetyhteyden päästäkseen rekisterin osoitteeseen, mikä tarkoittaa että sen VPC tarvitsee yhdyskäytävän. VPC luodaan ilman yhdyskäytävää, ellet sitä pyydä, ja ilman yhdyskäytävää ei ole internetyhteyttä eikä nimipalvelua — joten haku epäonnistuu jo ennen alkuaan.

Suositeltu tapa: synkronoi se Salaisuuksista ​

Frostmolnin hallitussa Kubernetesissa valitse External Secrets Operator -klusterilisäosa klusteria luodessasi tai lisää se ensin klusteriin, kun se on käynnissä (katso opas); muualla ajamaasi klusteriin asennat ESO:n itse. Tallenna seuraavaksi tunnuksen käyttäjätunnus ja salasana Salaisuuksiin nimillä registry-username ja registry-password, jotta ne vastaavat alla olevia remoteRef.key-arvoja — käytä portaalin lomaketta Salaisuudet → Luo tai yllä olevaa putkitusreseptiä sen sijaan että käyttäisit komentoa fm secrets create --value, joka toisi salasanan komentoriville.

Anna sitten External Secrets Operatorin rakentaa pull-secret klusteriin, jolloin salasana ei päädy koskaan manifestiin:

SecretStore on nimiavaruuskohtainen

SecretStore haetaan ExternalSecret-objektin omasta nimiavaruudesta, joten sekä frostmoln-varaston että sen taustalla olevan merkityn API-avainsalaisuuden on oltava nimiavaruudessa my-app — toista siellä External Secrets Operator -oppaan vaiheet 1 ja 2. Ole tästä tietoinen: se sijoittaa nimiavaruuteen API-avaimen, joka voi lukea kaikki tenanttisi salaisuudet, vastineeksi siitä että yksi rekisterisalasana pysyy poissa sieltä. Rajaa tuo avain salaisuuksien lukuun ja pidä nimiavaruuden RBAC tiukkana.

yaml
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: frostmoln-registry
  namespace: my-app
spec:
  refreshInterval: 1h
  secretStoreRef: { name: frostmoln, kind: SecretStore }
  target:
    name: frostmoln-registry
    template:
      # Ilman tätä tyyppiä ja avainta ESO luo Opaque-Secretin, jota kubelet
      # ei käytä pull-secretinä.
      type: kubernetes.io/dockerconfigjson
      data:
        .dockerconfigjson: |
          {"auths":{"registry.sweden.frostmoln.cloud":{"username":{{ .username | toJson }},"password":{{ .password | toJson }}}}}
  data:
    - secretKey: username
      remoteRef: { key: registry-username }
    - secretKey: password
      remoteRef: { key: registry-password }

toJson lainausmerkitsee ja suojaa arvot, joten salasana, jossa on " tai \, tuottaa silti kelvollisen dokumentin. Huomaa refreshInterval: kun olet korvannut tunnuksen, klusteri käyttää vanhaa seuraavaan päivitykseen asti, joten laske väliä tai poista synkronoitu Secret pakottaaksesi päivityksen.

Kertaluonteisesti: luo Secret suoraan ​

Frostmolnin hallitussa Kubernetesissa tämä on tapa luoda pull-secret.

Tämä jättää salasanan komentohistoriaasi

Salasana päätyy tiedostoon ~/.bash_history / ~/.zsh_history ja prosessiargumentteihin (/proc/<pid>/cmdline) kutsun ajaksi. Käytä tätä käsin tehtävään käyttöönottoon, älä koskaan skriptissä tai CI-työssä — komentoja kaiuttavassa CI-työssä se päätyy koontilokiin. Jos klusterissa on ESO, suosi yllä olevaa ESO-reseptiä.

bash
kubectl create secret docker-registry frostmoln-registry \
  --docker-server=registry.sweden.frostmoln.cloud \
  --docker-username='robot$t-...-a1b2c3d4' \
  --docker-password='<kerran näytetty salasana>' \
  --namespace my-app

Kummassakin tapauksessa viittaa siihen podin määrittelyssä:

yaml
spec:
  imagePullSecrets:
    - name: frostmoln-registry
  containers:
    - name: my-app
      image: registry.sweden.frostmoln.cloud/t-3f2a9c1e4b7d4a2f8e1c5d6b7a8f9e0d/my-app@sha256:<digest>

Kiinnittäminen digestiin tunnisteen sijaan on tässä ylimääräisten merkkien arvoista. Nimiavaruutesi tunnisteet ovat muuttuvia ja kuka tahansa push-tunnuksen haltija voi siirtää niitä, joten digest on ainoa viittaus, joka ei voi muuttua käynnissä olevan deploymentin alta.

Terraform ​

Sekä käyttöönotto että tunnus ovat Terraform-resursseja:

hcl
resource "frostmoln_container_registry" "this" {}

resource "frostmoln_container_registry_credential" "ci" {
  name       = "ci-pipeline"
  capability = "pull" # oletus; käytä "push" vain julkaisijalle

  depends_on = [frostmoln_container_registry.this]
}

output "image_prefix" {
  value = "${frostmoln_container_registry.this.endpoint}/${frostmoln_container_registry.this.namespace}"
}

Tunnuksen salasana kirjoitetaan Terraformin tilaan

Se palautetaan vain kerran, joten tarjoaja tallentaa sen. Ilman määritettyä backendiä Terraform kirjoittaa tiedoston terraform.tfstate selväkielisenä JSON:na työhakemistoosi — yleensä git-repositorion sisään, mikä on ristiriidassa jokaisen muun tällä sivulla olevan ohjeen kanssa.

Käytä salattua etäbackendiä (Frostmolnin objektitallennus S3-backendin kautta toimii) ja lisää terraform.tfstate* tiedostoon .gitignore — terraform.tfstate.backup on toinen selväkielinen kopio, joka säilyy myös etäbackendiin siirtymisen jälkeen.

Salasana päätyy myös komentoon terraform show, JSON-suunnitelmatiedostoihin, kaikkiin CI-artefakteihin tai välimuisteihin, jotka säilyttävät tilan ajokertojen välillä, sekä TF_LOG=DEBUG/TRACE-tulosteeseen, joka tallentaa tarjoajan HTTP-vastaukset — myös sen, joka kantaa salasanan. Merkintä sensitive = true piilottaa sen vain konsolitulosteesta — ei tilasta eikä komennosta terraform output -json.

terraform destroy ei poista rekisteriä. Purkutoimintoa ei ole — resurssi poistetaan tilasta varoituksen kera, kun taas nimiavaruus, sen kuvat ja sen laskutettava tila jäävät kaikki voimaan. Tunnus on muuttumaton: name- tai capability-kentän muuttaminen korvaa sen ja antaa uuden salasanan, joten päivitä käyttäjäsi silloin.

Tallennustila ja raja ​

Nimiavaruudellasi on kova tallennusraja: tenanttisi konttirekisterin tallennuskiintiö — 10 GB, ellei sinulle ole hyväksytty korotusta, jolloin se on hyväksytty määrä. Jokaisella pull-through-välimuistin nimiavaruudella on oma rajansa, enintään 10 GiB (10737418240 tavua). Push, joka ylittäisi sen, estetään 403-vastauksella, ja esto kertoo kaikki kolme lukua — koon, joka ei mahtunut, mitä jo käytät ja rajasi:

http
HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=utf-8

{"errors":[{"code":"DENIED","message":"adding 900.0 KiB of storage resource, which when updated to current usage of 300.0 KiB will exceed the configured upper limit of 1.0 MiB."}]}

Tämä on rekisterin oma vastaus, otettu nimiavaruudesta, jonka raja on tarkoituksella pieni; omasi kertoo oman rajasi. Sen, mitä docker push tai muu asiakasohjelma siitä tulostaa, ratkaisee asiakasohjelma. Luvut ovat tekstiä message-kentän sisällä siinä yksikössä, jonka rekisteri valitsee — lue ne, älä jäsennä niitä koneellisesti. Nimiavaruudessasi todella voimassa oleva raja on se, joka näkyy portaalissa kohdassa Käytetty tallennustila ja komennossa fm registry status; lue se sieltä äläkä oleta lukua.

Tuo käyttöluku on se, minkä rekisteri laskee rajaasi vasten: nimiavaruuteesi tallennetut deduplikoidut tavut. Se ei ole docker image ls -listan kuvakokojen summa, ja ne todella eroavat toisistaan — saman nimiavaruuden tunnisteiden kesken jaetut kerrokset lasketaan kerran. Laskenta on nimiavaruuskohtaista, ja raja kohdistuu nimiavaruuteen: sama kerros toisessa nimiavaruudessa lasketaan uudelleen. Lue se muodossa "tallennustilaa käytössä rajaasi vasten", äläkä käytä sitä laskun täsmäyttämiseen. Se heijastaa pushisi jo silloin, kun push valmistuu — mutta jo tallentamiesi kerrosten pushaaminen uudelleen ei liikuta lukua juuri lainkaan.

Tilan vapauttaminen ​

Poista kuva, niin tila palaa. Portaalissa: avaa repositorio kohdassa Kuvat ja paina rivillä Poista. Komentoriviltä:

bash
fm registry image list web/api                       # etsi poistettava
fm registry image list web/api -o json               # digestit kokonaisina
fm registry image delete web/api sha256:1b0c8dd1...  # kysyy ensin
fm registry image delete web/api sha256:1b0c8dd1... --force

Se ottaa digestin, ei tunnistetta, ja tunniste hylätään eikä arvata. Tunniste liikkuu. Jos putkesi pushasi v1:n uudelleen sen välissä, kun luit listan ja painoit enteriä, "sen jolla on tunniste v1" poistaminen tuhoaisi juuri sen kuvan, jonka halusit säilyttää — eikä mikään kertoisi siitä. Kopioi digest listalta.

Kuva poistuu, ei vain tunniste. Jokainen siihen osoittava tunniste lähtee mukana, samoin manifesti — sen jälkeen sitä ei voi hakea nimellä eikä digestillä. Tunnisteen poistoa ei ole erikseen: etiketin poistaminen ja sisällön jättäminen digestillä haettavaksi ei vapauta mitään ja vain näyttää poistolta.

Tallennuslukemasi laskee heti — mutta vähemmän kuin näytetty koko

Luku kohdassa Tallennustilaa käytössä ja fm registry status -komennossa heijastaa poiston jo silloin, kun se valmistuu. Et odota mitään siivousikkunaa.

Se ei laske näytetyn kuvakoon verran. Tuo sarake on kuvan oma koko ja laskee jokaisen kerroksen kokonaan; saman nimiavaruuden sisällä rajaasi vasten lasketaan jokainen tallennettu kerros kerran. Sellaisen kuvan poistaminen, jonka peruskerroksia muut tunnisteesi yhä käyttävät, vapauttaa vain ne kerrokset, joihin mikään muu ei viittaa — usein pienen osan siitä luvusta, jota klikkasit.

Eli: poista ja lue sitten uusi luku. Älä laske sitä kokosarakkeesta äläkä jatka poistamista jahdataksesi lukua, joka ei ollut tulossa.

Aloita tunnisteettomista. Rivi jossa lukee <untagged> on manifesti, jonka myöhempi push jätti orvoksi: mikään ei voi hakea sitä nimellä, ja se laskee yhä rajaasi vasten. Se on yleensä suurin osa siitä, mitä täysi nimiavaruus pitää sisällään.

bash
# jokainen tunnisteeton kuva repositoriossa, pelkät digestit
fm registry image list web/api --all -o json | jq -r '.data[] | select(.tags == []) | .digest'

Jos haluat tämän tapahtuvan automaattisesti, aseta säilytyskäytäntö. Se poistaa joka yö tunnisteettomat kuvat sekä ne tunnisteelliset kuvat, jotka ylittävät valitsemasi määrän uusimpia.

Usean arkkitehtuurin kuva poistetaan indeksinsä kautta. Sen alustakohtaisia osia ei voi poistaa erikseen, ja ne vastaavat ristiriidalla — poista indeksi, niin ne lähtevät mukana.

Keskeytetty rekisteri ei voi poistaa. Kirjoitukset hylätään, kun taas haut ja listaukset toimivat edelleen, joten näet aina mitä sinulla on.

docker rmi ei vapauta mitään. Se poistaa paikallisen kuvan omalta koneeltasi eikä lähetä rekisteriin lainkaan pyyntöä, joten rajaasi vasten laskettu tallennustila pysyy ennallaan.

Jos tallennuslukua ei näytetä lainkaan, tulkitse se muodossa "ei raportoitu", älä koskaan muodossa "rajaton" — pushit voidaan estää siinä tilassa. Ota yhteyttä tukeen, jos näet tämän.

Portaali ja fm näyttävät koot SI-yksiköissä (1 GB = 10⁹ tavua), samassa yksikössä, jossa tallennuskiintiö pyydetään. Pull-through-välimuistin 10737418240 tavun raja (10 GiB) näkyy siksi noin 10,7 GB:na; molemmat kuvaavat samaa rajaa.

Säilytyskäytännöt ​

Säilytyskäytäntö poistaa vanhat kuvat puolestasi, jotta CI-pushit eivät kasaudu rajaasi vasten. Tenantillasi on yksi käytäntö. Se koskee jokaista nimiavaruutesi repositoriota, ja jokainen repositorio arvioidaan erikseen.

Käytännössä on kaksi sääntöä. Kumpikin on valinnainen, mutta vähintään toinen on asetettava:

SääntöMitä se tekeeVäli
Säilytä N viimeisintä tunnisteellista kuvaaSäilyttää jokaisessa repositoriossa N viimeksi pushattua tunnisteellista kuvaa ja poistaa vanhemmat.1-1000
Poista tunnisteettomat kuvat X päivän jälkeenPoistaa tunnisteettomat kuvat, joiden viimeisimmästä pushista on yli X päivää.1-365

Asettamatta jätetty sääntö säilyttää kaiken omassa luokassaan. Pelkällä ensimmäisellä säännöllä tunnisteettomia kuvia ei koskaan poisteta; pelkällä toisella tunnisteellisia kuvia ei koskaan poisteta.

N laskee kuvia, ei tunnisteita. Kuva, jolla on kolme tunnistetta, lasketaan kerran. Samalla hetkellä pushatut kuvat säilytetään ilman taattua järjestystä, joten jos kaksi niistä osuu juuri rajalle N, älä luota siihen, kumpi jää. Kuvan pushaaminen uudelleen tai uuden tunnisteen antaminen olemassa olevalle kuvalle lasketaan uudeksi pushiksi: kuva siirtyy uusimpien joukkoon säilytä viimeisimmät -säännössä.

Usean arkkitehtuurin kuva säilytetään tai poistetaan kokonaisena. Sen alustakohtaiset osat ja siihen liitetyt allekirjoitukset seuraavat kuvaa. Käytäntö ei koskaan jätä sinulle puolikasta kuvaa eikä poista allekirjoitusta kuvasta, jonka se säilyttää.

Käytäntö ajetaan joka yö klo 00.00–06.00 UTC. Omaa aikataulua ei ole, eikä käytäntöä voi ajaa pyynnöstä. Tänään tallentamasi käytäntö tulee voimaan seuraavassa ajossa.

Poistettuja kuvia ei voi palauttaa

Säilytysajo poistaa kuvan, kaikki sen tunnisteet ja sen manifestin, aivan kuten käsin tehty poisto. Tarkista ennen käytännön tallentamista, ettei mikään käyttöönottamasi viittaa kuvaan, jonka käytäntö poistaisi — esimerkiksi julkaisuun, jota haet vain digestillä.

Pull-through-välimuistit eivät muutu. Säilytyskäytäntö koskee vain omaa nimiavaruuttasi. Jokaisella välimuistilla on oma sääntönsä — kuva, jota kukaan ei hae 7 päivään, poistetaan — eikä sitä voi muuttaa; katso Pull-through-välimuistit.

Vapautunut tila näkyy käytössäsi yöllisen ajon jälkeen. Tallennuslukusi, ja siten se, mistä sinua laskutetaan, heijastaa vapautunutta tilaa seuraavana aamuna. Lue luku silloin äläkä odota tarkkaa kellonaikaa.

Käytännön tallentaminen korvaa koko käytännön. Sääntö, jonka jätät pois tallentaessasi, tyhjennetään — sitä ei säilytetä aiemmasta.

Käytännön asettaminen vaatii oikeuden poistaa kuvia. Koska säilytyskäytäntö poistaa kuvia, sen tallentaminen vaatii sekä registry:artifacts:delete- että registry:settings:update-oikeuden (katso Toiminnot). Käytännön poistaminen vaatii vain registry:settings:update-oikeuden.

Käytännön asettaminen ​

Portaalissa: avaa Konttirekisteri ja käytä säilytyskorttia. Komentoriviltä:

bash
fm registry retention set --keep-last-tagged 10 --delete-untagged-after-days 14
fm registry retention get      # mitä on nyt asetettu
fm registry retention delete   # poista käytäntö; mitään muuta ei poisteta

Tallennus kysyy ensin, kun uusi käytäntö poistaa enemmän. Jos se poistaisi enemmän kuin nykyinen (ei aiempaa käytäntöä, juuri käyttöön otettu sääntö tai pienempi luku), portaali ja fm näyttävät molemmat ja pyytävät vahvistuksen. Skripteissä käytä fm registry retention set --force; ilman päätettä set kieltäytyy, ellei --force ole annettu.

Terraformilla:

hcl
resource "frostmoln_container_registry_retention" "this" {
  keep_last_tagged           = 10
  delete_untagged_after_days = 14

  depends_on = [frostmoln_container_registry.this]
}

depends_on viittaa yllä olevan Terraform-kohdan rekisteriresurssiin, joten kokoonpano, joka myös ottaa rekisterin käyttöön, luo sen ensin.

Resurssin poistaminen tai terraform destroy poistaa käytännön. Se ei tuo takaisin kuvia, jotka aiempi ajo on poistanut.

Jos rekisterisi on keskeytetty ​

Keskeytetty rekisteri palvelee edelleen pull-pyyntöjä. Uusien kuvien pushaaminen on estetty ja push-tunnuksesi näkyvät poissa käytöstä olevina — pull-tunnuksesi jatkavat toimintaansa tarkoituksella, koska juuri niin haet kuvasi ulos keskeytyksen aikana.

Keskeytyksen aikana et voi luoda etkä peruuttaa tunnusta. Jos siis sinulla on vain push-tunnuksia, et voi luoda pull-tunnusta, jota tarvitsisit vientiin. Yhden pysyvän pull-tunnuksen pitäminen välttää tämän.

Ota yhteyttä tukeen keskeytetyn rekisterin palauttamiseksi.

Mitä tapahtuu, kun suljet tenantin ​

Tenantin sulkeminen on ainoa tapa poistaa rekisteri, ja se tuhoaa pysyvästi jokaisen siinä olevan kuvan. Palautusta ei ole jälkikäteen, eikä Frostmolnilla ole varmuuskopiota, josta palauttaa.

Kulku on kiinteä:

MilloinMitä tapahtuu
Päivä 0, suljet tenantinRekisteri muuttuu vain luettavaksi. Push estetään ja push-tunnuksesi poistetaan käytöstä. Jo hallussasi olevat pull-tunnukset toimivat edelleen.
Päivät 0-30Vienti-ikkunasi. Nouda kaikki, minkä haluat säilyttää.
Päivä 30Jokainen kuva, jokainen tunnus ja itse nimiavaruus poistetaan pysyvästi.

Pull-tunnuksen on oltava olemassa ennen sulkemista. Sulkemisen aikana et voi luoda etkä perua tunnuksia, joten tenant, jolla on vain push-tunnuksia, ei voi viedä mitään — tarvitsemaasi tunnusta ei voi enää luoda. Pidä yksi pysyvä pull-tunnus, jos saatat joskus tarvita vientiä.

Vienti on tavallinen pull. Listaa hallussasi olevat ja nouda sitten jokainen viittaus:

bash
fm registry repository list
fm registry image list <repository>
docker pull registry.sweden.frostmoln.cloud/<nimiavaruutesi>/<repository>:<tagi>

Jos haluat vain vapauttaa tilaa etkä poistua, katso Tilan vapauttaminen — artefaktien poistaminen ei sulje mitään.