-
Parhaat käytannöt
Konttikuvien pitäminen pieninä
On tärkeää pitää konttikuvat pieninä. Pienemmät kuvat latautuvat nopeammin, mikä lyhentää Kubernetesin Podien käynnistysaikaa ja parantaa skaalaustoimintojen reagointikykyä. Ne käyttävät myös vähemmän tallennustilaa rekistereissä ja klusterin noodeilla, mikä on tärkeää monen käyttäjän ympäristöissä, kuten Rahdissa. Lisäksi pienempi kuva sisältää vähemmän paketteja ja tiedostoja, mikä pienentää mahdollista hyökkäyspintaa ja vähentää vanhentuneiden tai haavoittuvien komponenttien mukaan päätymisen riskiä. Tämä helpottaa ylläpitoa ja parantaa kokonaisvaltaista tietoturvaa. Koska pienemmät kuvat sisältävät vain sen, mitä sovellus todella tarvitsee, ne ovat ennakoitavampia, helpompia debugata ja yksinkertaisempia toistaa eri ympäristöissä. Rahdin rekisterissä kuvan kokoraja on 5 GiB.
Käytä minimaalista pohjakuvaa
Aloita pienimmästä kuvasta, joka silti tarjoaa tarvitsemasi ominaisuudet. Kuvat kuten Alpine, UBI-minimal tai Distroless sisältävät vain olennaiset komponentit, mikä pienentää lopullisen kuvan kokoa merkittävästi ja vähentää hyökkäyspintaa. Esimerkki:
Käytä monivaiheisia koonteja
Koosta sovelluksesi yhdessä vaiheessa, joka sisältää kääntäjät ja koontityökalut, ja kopioi vain lopullinen binaari tai tarvittava tuloste paljon pienempään ajonaikaiseen vaiheeseen. Tämä estää suurten työkaluketjujen päätymisen lopulliseen kuvaan. Esimerkki:
FROM golang:1.21 AS builder
WORKDIR /app
COPY ../../images .
RUN go build -o app
FROM alpine:3.19
COPY --from=builder /app/app /usr/local/bin/app
CMD ["app"]
Käytä .dockerignore-tiedostoa
.dockerignore-tiedoston avulla voit sulkea pois tiedostoja, kuten versionhallinnan metadataa, dokumentaatiota, artefakteja ja muita tarpeettomia tiedostoja. Tämä pienentää koontikontekstia ja pitää ne poissa kuvastasi. Se nopeuttaa koonteja ja estää ei-toivotun sisällön lisäämisen. Esimerkki:
Asenna vain se, mitä sovellus tarvitsee
Työkalujen, debuggainten, komentotulkkien tai kirjastojen lisääminen “varmuuden vuoksi” kasvattaa kuvan kokoa ja tietoturvariskiä. Pysy siinä vähimmäisjoukossa riippuvuuksia, joita sovelluksesi todella tarvitsee. Esimerkki:
Huono (paisunut kuva):
Parempi:
Yhdistä toisiinsa liittyvät komennot harvempiin kerroksiin.
Jokainen RUN-ohje luo uuden kerroksen. Jos asennat paketteja yhdessä kerroksessa ja siivoat ne toisessa, ei-toivottu sisältö jää aiempiin kerroksiin. Paketinhallinnat jättävät jälkeensä metadataa, välimuisteja ja väliaikaisia tiedostoja. Niiden siivoaminen samassa kerroksessa, jossa ne luodaan, estää niiden pysyvän tallentumisen kuvaan. Komentojen yhdistäminen estää tämän. Esimerkki:
Huono (paisunut kuva):
Parempi (kaikki yhdessä kerroksessa):
Pidä data poissa kuvasta
Kuvien tulisi sisältää vain sovelluksen ajonaikainen ympäristö. Tämä tarkoittaa, että sovelluksen suorittamiseen tarvittavaa dataa ei tule lisätä kuvaan. Näin kuva ei ainoastaan pysy pienempänä, vaan vältämme myös uudelleenkoonnin, kun data muuttuu. Data voidaan tallentaa ulkoiseen taltioon, joka liitetään Podiin käynnistyksen yhteydessä, tai se voidaan tallentaa etäobjektitallennukseen, kuten Altaaseen, ja ladata käynnistyksen aikana tai tarvittaessa pyynnöstä.