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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Å 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.
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.
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 \ |
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.
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.
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:
https: // linuxhint.com/install-and-use-docker-on-ubuntu/