Vad är Dockers BuildKit och varför betyder det?

Docker BuildKit är en opt-in bildbyggnadsmotor som erbjuder betydande förbättringar jämfört med den traditionella processen. BuildKit skapar bildlager parallellt och påskyndar den totala byggprocessen.

Vad är BuildKit?

BuildKit utvecklades som en del av Moby-projektet, ett Docker-försök att & # 8220; montera specialiserade containersystem utan att uppfinna hjulet igen. & # 8221; Det tillkännagavs 2017 och började levereras med Docker Engine under version 18.09.

BuildKit fokuserar på att förbättra byggprestanda, lagringshantering och utbyggbarhet. Dess rubrikkrav är parallell bearbetning, mer avancerad caching, en pluggbar arkitektur och automatisk sopuppsamling. Dessa kombineras till ett byggsystem som är mer effektivt och mer utdragbart än den ursprungliga motorn.

Lager som inte påverkar varandra kan byggas samtidigt, vilket minskar väntetiden för scener att slutföra. BuildKit optimerar också åtkomst till de lokala filer som du refererar till med COPY-instruktioner. Den spårar ändringarna du gör och kopierar bara filer som har ändrats sedan den senaste byggnaden, istället för att överföra hela byggkontext.

BuildKit förenklar byggnader med flera plattformar också. Du kan ange flaggan –plattform för att ange mål att bygga för. BuildKit monterar automatiskt ett lämpligt bildmanifest för att täcka alla angivna arkitekturer.

docker buildx –create –platform linux/amd64, linux/arm64.

Hur fungerar BuildKit?

BuildKits prestandaförbättringar underlättas genom att använda ett lågnivå-build-definitionsformat, kallat LLB. Det är ett grafbaserat binärt format som binder samman komplexa byggdefinitioner.

Annons

Eftersom lager är direktlänkade underlättar BuildKit snabbare jämförelse av byggdiagram och innehållet de innehåller. Standard Dockerfile-byggaren måste förlita sig på exakta heuristik för att avgöra om två bilder är jämförbara.

LLB är helt separat från BuildKit & # 8220; frontend. & # 8221; Frontend tar en mänsklig läsbar representation av en bild, till exempel en Dockerfile, och konverterar den till en LLB-graf. När en LLB har genererats kan den exporteras och flyttas mellan miljöer. Genom att exportera till ett register kan frontendklienter förvärva en befintlig LLB för att ytterligare förbättra förstagångsprestanda.

De tekniska detaljerna i LLB är ganska komplexa. Den underliggande tekniken är baserad på grafteori och kontrollsummajämförelse. Du behöver inte förstå det för att dra nytta av dess kraft: som slutanvändare bygger byggnader på samma sätt som någonsin, med docker build-kommandot.

BuildKit skapar fortfarande OCI-kompatibla bilder som är bärbara i olika behållarmiljöer. Du kan använda BuildKit för att skapa vilken Docker-bild som helst med en Linux-bas. Windows-bilder stöds för närvarande inte.

Aktivering av BuildKit Support

Det finns två sätt att aktivera BuildKit. Om du vill bygga en enda bild med funktionen ställer du in DOCKER_BUILDKIT-miljövariabeln i ditt skal:

DOCKER_BUILDKIT = 1 dockerbyggnad. Annonsering

För långvarig användning, konfigurera Docker-demon för att använda BuildKit som standard. Skapa eller redigera filen /etc/docker/daemon.json och lägg till följande innehåll i konfigurationsobjektet på högsta nivå:

{& quot; funktioner & quot ;: {& quot; buildkit & quot ;: true}}

Ladda om demonkonfigurationen för att tillämpa ändringen:

systemctl ladda docker

BuildKit kommer nu att användas istället för standardbyggnadsmotorn när du kör docker-byggkommandot.

Du kan se när BuildKit är aktivt eftersom det producerar olika CLI-utdata än den vanliga motorn. BuildKits framstegsdisplay erbjuder förbättrad läsbarhet och tydlig visualisering av när varje steg startar och avslutas. Informationen innehåller en uppdelning av den tid det tar att bygga varje lager.

& # 8220; docker buildx & # 8221;

Du kan också interagera med BuildKit via docker buildx-kommandon. Dessa kommer alltid att använda BuildKit. Dockers kommandogrupp exponerar avancerad BuildKit-funktionalitet inklusive möjligheten att bygga på en fjärrvärd.

En enda BuildKit-klient kan interagera med flera olika inställningar för bildbyggare. Detta underlättar byggandet av flera plattformar genom att låta dig lägga till en byggare för varje arkitektur du inriktar dig på.

Här är ett exempel på att lägga till en fjärrvärd som ett BuildKit-mål. Detta förutsätter att målmaskinen har ett Docker-uttag exponerat på TCP-port 2375. Du kan referera till värden med valfri Docker-slutpunktsidentifierare eller namnet på en Docker-kontext (erhållen från docker-sammanhang ls). Det senare låter dig bygga på kompatibla molnmiljöer genom att lägga till dem som ett sammanhang.

docker buildx skapa –namn remote-builder tcp: //min-docker-host: 2375 Annonsering

Du kan välja den byggare som ska användas med kommandot docker buildx:

docker buildx använd remote- byggare

Då kan du använda kommandot build för att bygga din bild på den valda byggarinstansen:

docker buildx build.

Du kan ta bort byggnadsinstanser med docker buildx rm och skicka in byggarens namn. Byggare listas med hjälp av docker buildx ls; du kan använda docker buildx inspect för att få mer detaljerad information om en specifik byggare.

Om du vill kontrollera BuildKits diskanvändning, kör docker buildx du-kommandot. Du kan rensa byggcachen för att frigöra lagring med docker buildx-beskärning. Detta kan minska prestanda nästa gång du bygger om din bild, eftersom tidigare cachade lager kommer att rekonstrueras.

Build Features

BuildKit lägger till ett par extra build- tidsfunktioner för att förenkla dina Dockerfile-steg.

Du kan skicka hemliga data med flaggan –secret. Detta låter din Dockerfile komma åt känsliga värden utan att lagra dem i bilden. Värdet är bara tillgängligt vid byggtiden.

dockerbyggnad –secret id = demo-hemlighet, src = demo-hemligt.txt. FRÅN min bild: senaste RUN –mount = type = secret, id = demo-secret cat/run/secrets/demo-secrets Annonsering

Denna Dockerfile refererar till en hemlighet som kallas demo-hemlighet. Dess värde läses från filen demo-secret.txt när du kör docker build. RUN-instruktionen med –mount-flaggan ger åtkomst till hemligheten. Filen monteras tillfälligt i katalogen/run/secrets.

BuildKit låter dig även vidarebefordra din värds SSH-agent så att dina bygginstruktioner kan interagera med befintliga fjärranslutningar. Skicka flaggan –ssh till docker build och lägg till –mount = type = ssh till KÖR instruktionerna i din Dockerfile:

docker build –ssh. KÖR –mount = type = ssh git clone git@example.com: /project.git

Dessa funktioner gör bildbyggnad bekvämare utan att den totala säkerheten påverkas. Vidarebefordran av SSH-agent och hemliga monteringar är endast tillgängliga i BuildKit; det finns ingen motsvarighet i standardbyggmotorn.

Slutsats

BuildKit är nästa generations Docker-bildbyggare som använder ett grafiskt binärt format för att drastiskt påskynda byggnader. Även om prestanda kommer att variera avsevärt för varje Dockerfile, kan du förvänta dig att du får stora hastigheter i fall där parallell bearbetning av bildlager är möjlig.

BuildKits arkitektur optimerar några av de senaste Dockerfile-funktionerna. Flerstegsbyggnader drar nytta av att hoppa över oanvända steg, vilket gör processen mer effektiv än standardbyggaren.

Även om BuildKit nu är stabilt levereras Docker fortfarande inte som standard. Se till att aktivera det i din Docker-klient om du vill använda dess funktioner. Det finns ett aktivt förslag om att göra BuildKit till den vanliga byggmotorn men det finns fortfarande olösta problem som förhindrar bytet.


Posted

in

by

Tags: