Basis van cloud en containers

FROM golang AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app .

FROM scratch
COPY --from=build /out/app /app
ENTRYPOINT ["/app"]

scratch is een leeg image dat geen enkel bestand bevat. Welke beschrijving van wat het uiteindelijke image bevat dat met het bovenstaande Dockerfile met een multi-stage build is gebouwd, is juist?

  1. AAlleen het uitvoerbare bestand /app dat in de stage build is gebouwd; de Go-compiler en de broncode zitten er niet in
  2. BDe lagen van de stage build en van de laatste stage worden allemaal gestapeld, dus de Go-compiler, de broncode en /app zitten er allemaal in
  3. CAlleen het golang-image van de eerste FROM en de broncode; /app wordt telkens gebouwd wanneer een container start
Antwoord en toelichting tonen

Antwoord: A. Alleen het uitvoerbare bestand /app dat in de stage build is gebouwd; de Go-compiler en de broncode zitten er niet in

Bij een multi-stage build begint elke FROM een stage, en alleen de laatste stage wordt het uiteindelijke image. De eerdere stages dienen om met hulpmiddelen zoals compilers artefacten te maken, en alleen de bestanden die in COPY --from worden genoemd, komen in de laatste stage terecht. Hier wordt alleen /app naar het lege image scratch gekopieerd; het resultaat is dus een klein image zonder de Go-compiler en zonder de broncode. Omdat scratch ook geen enkele gedeelde bibliotheek bevat, wordt CGO_ENABLED=0 gebruikt om een uitvoerbaar bestand te bouwen dat niet van andere bibliotheken afhangt. Minder inhoud betekent snellere pulls, minder hulpmiddelen voor aanvallers en minder doelwitten voor kwetsbaarheden.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van cloud en containers

  1. Wat is in Kubernetes de kleinste eenheid die wordt gedeployed en beheerd, en die een of meer containers groepeert die hetzelfde IP-adres en dezelfde volumes delen?
  2. In Kubernetes draait een Deployment met replicas: 3 drie Pods. Welke beschrijving van wat er gebeurt als een van deze Pods met kubectl delete pod wordt verwijderd, is juist?
  3. In een Kubernetes-Deployment wordt het containerimage in de Pod-template veranderd in een nieuwe versie. Welke beschrijving van wat er gebeurt met de standaardupdatestrategie (RollingUpdate) is juist?
  4. Een Deployment met replicas: 10 heeft als instellingen voor de rolling update maxSurge: 25% en maxUnavailable: 25%. Welke combinatie van de bovengrens van het totale aantal Pods en de ondergrens van het aantal beschikbare Pods tijdens een update is juist?
  5. In Kubernetes krijgt een Pod telkens een ander IP-adres wanneer hij opnieuw wordt gemaakt. Met welke resource kunnen andere applicaties via een naam en een adres die niet veranderen, verbinding maken met meerdere Pods die met labels zijn geselecteerd, waarbij de belasting over die Pods wordt verdeeld?