Sobes.tech
Middle

Որ դեպքերում է օգտագործվում բազմաբնակարանային (multi-stage) հավաքածուն?

sobes.tech AI

Պատասխան AI-ից

Docker- ում բազմաբնակարան կառուցում (multi-stage build) օգտագործվում է հետևյալ դեպքերում:

  1. Վերջնական պատկերի չափի նվազեցում: Առաջին (կամ միջնորդական) շերտում գտնվում են գործիքները, որոնք անհրաժեշտ են կոմպիլյացիայի, թեստերի կամ այլ շինարարության փուլերի համար (օրինակ՝ կոմպիլատոր, շինարարության կախվածություններ): Երկրորդ (վերջնական) շերտում միայն պատճենվում են այն արգումենտները, որոնք անհրաժեշտ են ծրագրի գործարկման համար (կոմպիլյացված կոդ, գործարկվող ֆայլեր, գործարկման ժամանակի գրադարաններ): Սա թույլ է տալիս բացառել ավելորդ կախվածությունները և գործիքները վերջնական պատկերի մեջ, ինչը զգալիորեն նվազեցնում է դրա չափը:
  2. Շինարարության և գործարկման փուլերի բաժանում: Մաքուր բաժանումը հեշտացնում է շինարարության գործընթացի հասկանալը և դեբագը: Կարող եք ունենալ փուլեր՝ կոդի կոմպիլյացիա, թեստեր, լինտինգ և միայն այնուհետև ստեղծել վերջնական պատկերը պատրաստված ծրագրով:
  3. Անվտանգության բարելավում: Վերջնական պատկերը պարունակում է նվազագույն անհրաժեշտ բաղադրիչները, ինչը նվազեցնում է հարձակման մակերեսը: Շինարարության գործիքները և աղբյուրային կոդը, որոնք կարող են պարունակել թերություններ, չեն մտնում արտադրական պատկերի մեջ:
  4. Շինարարության արագացում (кей որոշ դեպքերում): Միջնորդական պատկերը կարող է լինել կեշավորված, և փոփոխությունների դեպքում միայն վերջին փուլերում ամբողջը նորից կառուցելու կարիք չկա:
  5. Շինարարության գործընթացի միավորեցում: Ծրագրի կառուցումը և Docker պատկերի ստեղծումը դառնում են մի ավտոմատացված գործընթաց՝ մեկ Dockerfile-ի մեջ, ինչը հեշտացնում է CI/CD գիծը:

Օրինակ՝ Go ծրագրի համար:

# Կառուցման փուլ
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
# Կոմպիլյացիա գործարկվող ֆայլ
RUN go build -ldflags="-s -w" -o myapp .

# Վերջնական փուլ
FROM alpine:latest
WORKDIR /app
# Միայն նախորդ փուլից գործարկվող ֆայլը պատճենել
COPY --from=builder /app/myapp .
# Ծրագրի մեկնարկի հրամանը
CMD ["./myapp"]