Optimalisering av Docker -bilder

Optimalisering av Docker -bilder

Utviklere liker å jobbe med Docker for sin fleksibilitet og brukervennlighet. Når du oppretter applikasjoner, er det verdt å investere de ekstra tiden for å optimalisere Docker -bilder og Dockerfiles. Optimalisering vil hjelpe teamene med å dele mindre bilder, forbedre ytelsen og gjøre det lettere å feilsøke problemer. Nedenfor er noen anbefalinger for å lage bedre bilder og dockerfiles.

Optimalisering av Docker -bilder

Store Docker -bilder kan gjøre det vanskelig å dele. Også store bilder bremser utførelsen. Så å optimalisere bildene kan hjelpe med den overordnede utviklings- og produksjonsprosessen.

Velg riktig basebilder

Bildene som er tilgjengelige på Docker Hub er allerede optimalisert. I stedet for å bygge din egen, er det lurt å bruke de tilgjengelige optimaliserte bildene. Hvis du for eksempel trenger et Redis -bilde, har du muligheten til å bygge det på et Ubuntu -bilde eller direkte laste ned Redis One. Å bruke det allerede bygde Redis -bildet er et bedre alternativ fordi utviklerne allerede har tatt vare på noen overflødige pakker.

Bruk flertrinns bygg

Det nye alternativet med flere trinn i Docker (siden versjon 17.05) kan hjelpe deg med å skape smarte måter å optimalisere bildene dine. Du kan bygge en applikasjon og deretter overføre den til et nytt rent miljø for å distribuere. Det vil sikre at bare de nødvendige runtime -bibliotekene og avhengighetene er en del av det endelige bildet.

Reduser antall lag

Når du bygger et bilde, må du ta hensyn til lagene som er opprettet av Dockerfiles. Hver kjørekommando oppretter et nytt lag. Så å kombinere lagene kan redusere bildestørrelsen. Et enkelt eksempel er apt-get. Generelt kjører brukere kommandoen slik:

Kjør apt -get -Y -oppdatering
Kjør apt -get install -y python

Det vil lage to lag. Men å kombinere kommandoene vil lage et enkelt lag i det endelige bildet:

Kjør apt -get -y Update && apt -get install -y python

Så smarte kombinasjoner av kommandoer kan føre til mindre bilder.

Bygg tilpassede basebilder

Docker Caches -bilder. Hvis du trenger flere forekomster av de samme lagene, er det lurt å se på å optimalisere lagene og lage et tilpasset basebilde. Det vil øke hastigheten på belastningstider og gjøre det lettere å spore.

Bygg på toppen av produksjonsbilder

Testbilder krever flere verktøy og biblioteker for å teste ut funksjoner. Det er lurt å bruke produksjonsbildet som base og lage testbilder på toppen av det. Unødvendige testfiler vil være utenfor basen. Så produksjonsbilder vil forbli små og rene for distribusjon.

Unngå lagring av applikasjonsdata

Lagring av applikasjonsdata i beholderen vil ballong opp bildene dine. For produksjonsmiljøer, bruk alltid volumfunksjonen for å holde beholderen adskilt fra dataene.

Beste praksis for å skrive Dockerfiles

Dockerfiles lar utviklere kodifisere prosesser. Så det er et flott verktøy for å forbedre Docker Image Building Process. Her er noen få praksis som vil hjelpe deg med å forbedre utviklingen din.

Design flyktige containere

Prøv å designe containere som er enkle å lage og ødelegge. Hvis containere er for avhengige av perifere miljøer og konfigurasjoner, er de vanskeligere å vedlikeholde. Så å designe statsløse containere kan bidra til å forenkle systemet.

Bruk .Dockerignore for å optimalisere bilder

Hvis du har en komplisert bygg som går gjennom flere kataloger rekursivt, blir alle filene og katalogene sendt til Docker -demonen. Det kan resultere i større bilder og tregere byggetider. Du kan bruke .Dockerignore for å ekskludere unødvendige filer og mapper som kompliserer byggeprosessen.

Bruk flertrinns bygg

Multi-trinns bygg er en ny Docker-funksjon siden versjon 17.05. Det lar utviklere bygge flere bilder i samme Dockerfile og flytte gjenstander fra en beholder til en annen i selve Dockerfilen. Så du kan ha mindre og optimaliserte gjenstander i det endelige bildet uten å bruke kompliserte skript for å oppnå de samme resultatene.

Installer bare pakker

Dockerfile skal bare installere de nakne minimumspakkene som er nødvendige for å kjøre tjenestene. Hver pakke krever plass i bildet. Så visse applikasjoner som Ping eller Text Editor kan være unødvendig i sammenheng med tjenesten som kjøres på containeren. Å forstå kravene til en bestemt tjeneste kan hjelpe deg med å skrive bedre Dockerfiles som kan lage optimaliserte bilder.

Tenk mikroservices

Å designe dockerfiles med mikroservices arkitektur i tankene kan være nyttig. Det er ikke alltid mulig å distribuere en prosess per container. Men utviklere kan tenke hvordan de kan distribuere prosessene sine mer proaktivt og ta beslutninger som vil hjelpe deg med å distribuere tjenester på en frakoblet måte. Containere er en naturlig passform for modulær design. Så dockerfilene dine bør dra nytte av mulighetene Docker gir.

Vurder effekten av instruksjoner på lag

Kjør bare, kopier og legg til DockerFiles Lag nye lag siden versjon 1.10. Andre instruksjoner påvirker ikke direkte størrelsen på de endelige bildene. Så du bør være årvåken når de bruker disse kommandoene. Å kombinere flere kommandoer kan også redusere antall lag. Færre lag betyr mindre størrelser.

Sorter flere linjer

Hver gang du har et multi-linjers argument, sorter argumentene alfanumerisk for å forbedre vedlikeholdet av koden. Tilfeldige argumenter kan føre til duplikasjoner. De er også vanskeligere å oppdatere. Et godt eksempel:

Kjør apt-get Update && apt-get install -y \
apache2 \
git \
iputils-ping \
Python \

Unngå å bruke: siste

Hvis du bruker fra [Imagename]: Siste, kan du få problemer når bildet endres. Det kan bli et vanskelig problem å spore. Å bruke spesifikke tagger kan sikre at du kjenner det nøyaktige bildet som brukes fra Docker -registeret.

Legg til bare nødvendige filer fra katalogen

Dockerfile -kommandoer utføres fortløpende for å bygge bilder, og det bygger bare lag som ikke allerede er til stede. Anta at du har en pakke.JSON for NPM og krav.txt for pip. Du kan skrive følgende dockerfile hvor pakken.JSON og krav.TXT er i MyCode -mappen:

KOPIERE ./Mycode//Home/Program/
Kjør NPM -installasjon
Kjør Pip Install -r -krav

Imidlertid, hver gang det er en endring i noen av filene i MyCode, må begge kjører kommandoer gjenoppbygges. I stedet, hvis koden er skrevet på følgende måte:

KOPIERE ./MyCode/Package.JSON/Hjem/program/pakke.JSON
WorkDir /Home /Program
Kjør NPM -installasjon
KOPIERE ./mycode/krav.TXT/Hjem/program/krav.tekst
WorkDir /Home /Program
Kjør Pip Install -r -krav

Deretter vil RUN -kommandoene være uavhengige av hverandre og endre i en enkelt fil i MyCode -mappen vil ikke påvirke både NPM- og PIP RUN -kommandoer. Å se på avhengigheter som dette kan hjelpe deg med å skrive bedre dockerfiles.

Videre studier

Ovennevnte teknikker og beste praksis skal hjelpe deg med å bygge mindre Docker -bilder og skrive bedre Dockerfiles. Her er lenker for å hjelpe deg med å finne ut mer informasjon om forskjellige emner:

  • Docker Development Best Practices
  • Docker multi-trinns bygninger
  • Docker File Reference

Referanser:

  • https: // dokumenter.Docker.com/utvikle/dev-best-praksis/
  • https: // dokumenter.Docker.com/motor/userguide/eng-image/dockerfile_best-practices/
  • https: // dokumenter.Docker.com/motor/userguide/eng-image/baseImages/
  • https: // dokumenter.Docker.com/motor/userguide/eng-image/multistage-build/
  • https: // blogg.Kodeship.com/redusere-docker-bildestørrelse/
  • https: // hackernoon.COM/TIPS-til-REDUCER-DOCKER-IMAGE-Size-876095DA3B34
  • https: // dokumenter.Docker.com/motor/referanse/byggherre/#dockerignore-fil
  • https: // løpbar.com/blogg/9-kommong-dockerfile-mistakes

https: // linuxhint.com/install-and-use-docker-on-ubuntu/