Viktige takeaways
- Bruk offisielle Docker-bilder for bedre sikkerhet og ytelse. Å bygge dine egne bilder kan føre til feil konfigurasjon og tar mer tid.
- Bruk spesifikke versjoner av Docker-bilder for å unngå uforutsigbar oppførsel og sammenstøt med avhengigheter. Trekk og bygg med bilder av en bestemt versjon.
- Skann Docker-bilder for sikkerhetssårbarheter ved hjelp av docker-skanningskommandoen. Finn ut om et bilde er sikkert nok for applikasjonen din.
Docker er den mest populære containeriseringsprogramvaren, men ikke alle bruker den effektivt. Hvis du ikke følger Dockers beste praksis, kan du la appene dine være sårbare for sikkerhetsproblemer eller ytelsesproblemer.
Her er noen beste fremgangsmåter du kan ta i bruk for å bruke Docker-funksjoner ressurssterkt. Disse tiltakene forbedrer sikkerheten og sikrer at du lager vedlikeholdbare Docker-filer.
1. Bruk offisielle Docker-bilder
Når du samler applikasjonen din, må du bruke et Docker-bilde. Du kan bygge et bilde med tilpasset konfigurasjon eller bruke Dockers offisielle bilder.
Å bygge dine egne bilder krever at du håndterer all konfigurasjonen selv. For å bygge et bilde for en node.js-applikasjon, må du for eksempel laste ned node.js og dens avhengigheter. Prosessen er tidkrevende og resulterer kanskje ikke i riktig konfigurasjon.
Docker anbefaler at du bruker et offisielt node.js-bilde som kommer med alle de riktige avhengighetene. Docker-bilder har bedre sikkerhetstiltak, er lette og er testet for ulike miljøer. Du finner de offisielle bildene på Dockers offisielle bilder side.
2. Bruk spesifikke versjoner av Docker Image
Vanligvis, når du trekker et offisielt bilde, er det det med den siste taggen som representerer den siste oppdaterte versjonen av det bildet. Hver gang du bygger en beholder fra det bildet, er det en annen versjon av den siste beholderen.
Å bygge med forskjellige Docker-bildeversjoner kan forårsake uforutsigbar oppførsel i applikasjonen din. Versjonene kan kollidere med andre avhengigheter og til slutt føre til at appen din mislykkes.
Docker anbefaler at du trekker og bygger ved å bruke bilder av en spesifikk versjon. Offisielle bilder har også dokumentasjon og dekker de vanligste brukstilfellene.
For eksempel i stedet for docker pull alpint, bruk docker pull alpint: 3.18.3. Docker vil trekke den spesifikke versjonen. Du kan deretter bruke den i påfølgende bygg, og redusere feil i applikasjonen. Du kan finne de spesielle versjonene av bilder på den offisielle Docker-bildesiden, under Støttede tagger og respektive Dockerfile-lenker:
3. Skann bilder for sikkerhetssårbarheter
Hvordan kan du fastslå at et bilde du vil bygge med ikke har noen sikkerhetssårbarheter? Ved å skanne den. Du kan skanne Docker-bilder ved å bruke docker-skanningskommandoen. Syntaksen er som følger:
docker scan [IMAGE]
Du må først logge på docker for å skanne et bilde.
docker login
Skann deretter det spesifikke bildet du vil sjekke:
docker scan ubuntu: latest
Et verktøy som heter Synk skanner bildet og viser eventuelle sårbarheter i henhold til deres alvorlighetsgrad. Du kan se typen sårbarhet og lenker til informasjon om det, inkludert hvordan du kan fikse det. Du kan se fra skanningen om bildet er sikkert nok for applikasjonen din.
4. Bruk Docker-bilder i små størrelser
Når du trekker et Docker-bilde, kommer det med alle systemverktøy. Dette øker bildestørrelsen med verktøy du ikke trenger.
Store Docker-bilder tar opp lagringsplass og kan redusere kjøretiden til containere. De har også større mulighet for sikkerhetssårbarheter.
Du kan reduser størrelsen på Docker-bilder ved å bruke alpine-bilder. Alpine bilder er lette og kommer med bare de nødvendige verktøyene. De reduserer lagringsplass, noe som gjør at applikasjonen din kjører raskere og mer effektivt.
Du finner en alpinversjon for de fleste offisielle bildene på Docker. Her er et eksempel på alpine versjoner for PostgreSQL:
5. Optimaliser hurtigbufring bildelag
Hver kommando i en Dockerfile representerer et lag på bildet. Lagene har forskjellige verktøy og utfører forskjellige funksjoner. Hvis du ser på de offisielle bildene på Docker Hub, vil du se instruksjonene som ble brukt til å lage dem.
Dockerfilen inneholder alt du trenger for å lage bildet. Det er en av grunnene til at mange utviklere foretrekker Docker fremfor virtuelle maskiner.
Her er strukturen til et eksempel på et alpint bilde:
Når du bygger applikasjonen din basert på et bilde, legger du til flere lag i bildet. Docker kjører instruksjoner på en Dockerfil fra topp til bunn, og hvis et lag endres, må Docker gjenoppbygge påfølgende lag.
Den beste praksisen er å ordne Dockerfilen fra filene som endrer seg minst til de som endres oftest. Instruksjonene som ikke endres, som installasjon, kan være øverst i filen.
Når du endrer en fil, bygger Docker fra de endrede filene og cacher de uendrede filene over den. Derfor går prosessen raskere.
Se på eksemplet illustrert i bildet ovenfor. Hvis det er en endring i applikasjonsfilene, bygger Docker derfra; den trenger ikke å installere npm-pakker på nytt.
Hvis du bygger fra bildet, vil prosessen gå raskere enn å gjenoppbygge alle de andre lagene på nytt. Bufring øker også hastigheten på å trekke og skyve bilder fra Docker Hub.
7. Bruk en .dockerignore-fil
Når du bygger et bilde ved hjelp av en Dockerfile, kan det hende du ønsker å holde visse opplysninger privat. Noen filer og mapper kan være en del av prosjektet, men du vil ikke inkludere dem i byggeprosessen.
Bruk av en .dockerignore-fil reduserer bildestørrelsen betraktelig. Dette er fordi byggeprosessen kun inkluderer de nødvendige filene. Det hjelper også å holde filer private og unngå å avsløre hemmelige nøkler eller passord.
.dockerignore-filen er en fil du oppretter i samme mappe som Dockerfilen. Det er en tekstfil, omtrent som en .gitignore-fil, som inneholder navnene på alle filer du ikke vil inkludere i byggeprosessen.
Her er et eksempel:
8. Bruk prinsippet om den minst privilegerte brukeren
Som standard bruker Docker root-brukeren som admin for tillatelse til å kjøre kommandoer, men dette er dårlig praksis. Hvis det er en sårbarhet i en av containerne, kan hackere få tilgang til Docker-verten.
For å unngå dette scenariet, opprett en dedikert bruker og gruppe. Du kan angi de nødvendige tillatelsene for gruppen for å beskytte sensitiv informasjon. Hvis en bruker blir kompromittert, kan du slette dem uten å avsløre hele prosjektet.
Her er et eksempel som viser hvordan du oppretter en bruker og angir deres tillatelser:
Noen basisbilder har pseudobrukere opprettet i dem. Du kan bruke de installerte brukerne i stedet for root-brukertillatelsene.
Hvorfor du bør ta i bruk Dockers beste praksis
Beste praksis er en fin måte å redusere sårbarheter og skrive renere kode. Det er mange beste fremgangsmåter du kan bruke på hver Docker-funksjon du bruker.
Et godt organisert prosjekt gjør synkronisering enklere med andre orkestreringsverktøy som Kubernetes. Du kan starte med de som er skissert i artikkelen og ta i bruk flere etter hvert som du lærer Docker.