Nøgle takeaways
- Brug officielle Docker-billeder for bedre sikkerhed og ydeevne. At bygge dine egne billeder kan resultere i forkert konfiguration og tager længere tid.
- Brug specifikke versioner af Docker-billeder for at undgå uforudsigelig adfærd og sammenstød med afhængigheder. Træk og byg ved hjælp af billeder af en bestemt version.
- Scan Docker-billeder for sikkerhedssårbarheder ved hjælp af docker-scanningskommandoen. Afgør, om et billede er sikkert nok til din applikation.
Docker er den mest populære containeriseringssoftware, men ikke alle bruger den effektivt. Hvis du ikke følger Dockers bedste praksis, kan du lade dine apps være sårbare over for sikkerhedsproblemer eller ydeevneproblemer.
Her er nogle bedste praksisser, du kan anvende, for at bruge Docker-funktioner ressourcestærkt. Disse foranstaltninger forbedrer sikkerheden og sikrer, at du opretter vedligeholdelige Docker-filer.
1. Brug officielle Docker-billeder
Når du containeriserer din applikation, skal du bruge et Docker-image. Du kan bygge et billede med brugerdefineret konfiguration eller bruge Dockers officielle billeder.
At bygge dine egne billeder kræver, at du selv håndterer hele konfigurationen. For at bygge et billede til en node.js-applikation skal du for eksempel downloade node.js og dens afhængigheder. Processen er tidskrævende og resulterer muligvis ikke i hele den korrekte konfiguration.
Docker anbefaler, at du bruger et officielt node.js-billede, som kommer med alle de korrekte afhængigheder. Docker-billeder har bedre sikkerhedsforanstaltninger, er lette og er testet til forskellige miljøer. Du kan finde de officielle billeder på Dockers officielle billeder side.
2. Brug specifikke versioner af Docker Image
Normalt, når du trækker et officielt billede, er det det med det seneste tag, som repræsenterer den seneste opdaterede version af billedet. Hver gang du bygger en container ud fra det billede, er det en anden version af den sidste container.
At bygge med forskellige Docker-billedversioner kan forårsage uforudsigelig adfærd i din applikation. Versionerne kan kollidere med andre afhængigheder og i sidste ende få din app til at fejle.
Docker anbefaler, at du trækker og bygger ved hjælp af billeder af en bestemt version. Officielle billeder har også dokumentation og dækker de mest almindelige use cases.
For eksempel i stedet for docker pull alpine, brug docker pull alpint: 3.18.3. Docker vil trække den specifikke version. Du kan derefter bruge det i successive builds, hvilket reducerer fejl i din applikation. Du kan finde de særlige versioner af billeder på den officielle Docker-billedside, under Understøttede tags og respektive Dockerfile-links:
3. Scan billeder for sikkerhedssårbarheder
Hvordan kan du fastslå, at et billede, du vil bygge med, ikke har nogen sikkerhedssårbarheder? Ved at scanne den. Du kan scanne Docker-billeder ved hjælp af docker-scanningskommandoen. Syntaksen er som følger:
docker scan [IMAGE]
Du skal først logge på docker for at scanne et billede.
docker login
Scan derefter det specifikke billede, du vil kontrollere:
docker scan ubuntu: latest
Et værktøj kaldet Synk scanner billedet og viser eventuelle sårbarheder i henhold til deres alvor. Du kan se typen af sårbarhed og links til oplysninger om den, herunder hvordan du løser den. Du kan se på scanningen, om billedet er sikkert nok til din applikation.
4. Brug Docker-billeder i små størrelser
Når du trækker et Docker-billede, kommer det med alle systemværktøjer. Dette øger billedstørrelsen med værktøjer, du ikke har brug for.
Store Docker-billeder optager lagerplads og kan sænke kørselstiden for containere. De har også en større mulighed for sikkerhedssårbarheder.
Du kan reducere størrelsen af Docker-billeder ved hjælp af Alpine-billeder. Alpine billeder er lette og kommer kun med de nødvendige værktøjer. De reducerer lagerplads, hvilket får din applikation til at køre hurtigere og mere effektivt.
Du finder en Alpine-version til de fleste af de officielle billeder på Docker. Her er et eksempel på alpine versioner til PostgreSQL:
5. Optimer cache-billedlag
Hver kommando i en Dockerfile repræsenterer et lag på billedet. Lagene har forskellige værktøjer og udfører forskellige funktioner. Hvis du ser på de officielle billeder på Docker Hub, vil du se instruktionerne, der bruges til at oprette dem.
Dockerfilen indeholder alt hvad du behøver for at skabe billedet. Det er en af grundene til, at mange udviklere foretrækker Docker frem for virtuelle maskiner.
Her er strukturen af et eksempel på et alpine billede:
Når du bygger din applikation baseret på et billede, tilføjer du flere lag til billedet. Docker kører instruktioner på en Dockerfil fra top til bund, og hvis et lag ændres, skal Docker genopbygge efterfølgende lag.
Den bedste praksis er at arrangere din Dockerfile fra de mindst skiftende filer til dem, der skifter oftest. Instruktionerne, der ikke ændres, f.eks. installation, kan være øverst i filen.
Når du ændrer en fil, bygger Docker fra de ændrede filer og cacher de uændrede filer over den. Derfor kører processen hurtigere.
Se på eksemplet illustreret på billedet ovenfor. Hvis der er en ændring i programfilerne, bygger Docker derfra; det behøver ikke at installere npm-pakker igen.
Hvis du bygger ud fra billedet, vil processen køre hurtigere end at genopbygge alle de andre lag igen. Caching gør også hurtigere at trække og skubbe billeder fra Docker Hub.
7. Brug en .dockerignore-fil
Når du bygger et billede ved hjælp af en Dockerfile, ønsker du måske at holde visse oplysninger private. Nogle filer og mapper kan være en del af projektet, men du ønsker ikke at inkludere dem i byggeprocessen.
Brug af en .dockerignore-fil reducerer billedstørrelsen betydeligt. Dette skyldes, at byggeprocessen kun omfatter de nødvendige filer. Det hjælper også med at holde filer private og undgå at afsløre hemmelige nøgler eller adgangskoder.
.dockerignore-filen er en fil, du opretter i samme mappe som din Dockerfile. Det er en tekstfil, ligesom en .gitignore-fil, der indeholder navnene på alle filer, du ikke ønsker at inkludere i byggeprocessen.
Her er et eksempel:
8. Brug princippet om den mindst privilegerede bruger
Som standard bruger Docker root-brugeren som admin for tilladelse til at køre kommandoer, men dette er dårlig praksis. Hvis der er en sårbarhed i en af containerne, kan hackere få adgang til Docker-værten.
For at undgå dette scenarie skal du oprette en dedikeret bruger og gruppe. Du kan indstille de nødvendige tilladelser til gruppen for at beskytte følsomme oplysninger. Hvis en bruger bliver kompromitteret, kan du slette dem uden at afsløre hele projektet.
Her er et eksempel, der viser, hvordan man opretter en bruger og indstiller deres tilladelser:
Nogle basisbilleder har pseudobrugere oprettet i dem. Du kan bruge de installerede brugere i stedet for root-brugertilladelserne.
Hvorfor du bør vedtage Dockers bedste praksis
Bedste praksis er en fantastisk måde at reducere sårbarheder og skrive renere kode. Der er mange bedste fremgangsmåder, som du kan anvende på hver Docker-funktion, du bruger.
Et velorganiseret projekt gør synkronisering lettere med andre orkestreringsværktøjer som Kubernetes. Du kan starte med dem, der er beskrevet i artiklen og adoptere flere, efterhånden som du lærer Docker.