Middle
Дар кадом ҳолатҳо сохтани бисёрмарҳилавӣ (multi-stage) истифода мешавад؟
sobes.tech AI
Ҷавоб аз AI
Дастури бо бисёрқадамӣ (multi-stage build) дар Docker дар ҳолатҳои зерин истифода мешавад:
- Кам кардани андозаи тасвири ниҳоӣ: Дар қабати аввал (ё миёна) асбобҳое ҷойгир мешаванд, ки барои компилютсия, тестҳо ё дигар марҳилаҳои сохтмон (масалан, компилятор, вобастагиҳои сохтмон) заруранд. Дар қабати дуюм (ниҳоӣ) танҳо артефактҳое нусхабардорӣ мешаванд, ки барои иҷрои барнома (коди компилютшуда, файлҳои иҷрошаванда, китобхонаҳои вақти иҷро) заруранд. Ин роҳ имкон медиҳад, ки вобастагиҳо ва асбобҳои сохтмон дар тасвири ниҳоӣ дохил нашаванд, ки андозаи онро назар ба назар кам мекунад.
- Ҷудо кардани марҳилаҳои сохтмон ва иҷро: Ҷудоии равшан ба фаҳмиши раванд ва хатоҳои он кӯмак мекунад. Мумкин аст, ки марҳилаҳо барои компилютсия кардани коди манбаъ, иҷрои тестҳо, линтинг ва танҳо пас аз он сохтани тасвири ниҳоӣ бо барномаи тайёр барои паҳнкунӣ дошта бошанд.
- Беҳтар кардани бехатарӣ: Тасвири ниҳоӣ минималистӣ буда, компонентҳои заруриро дар бар мегирад, ки сатҳи ҳамларо кам мекунад. Асбобҳои сохтмон ва коди манбаъ, ки метавонанд заифӣ дошта бошанд, дар тасвир дохил намешаванд, ки дар истеҳсолот истифода мешаванд.
- Тезтар сохтани (дар баъзе ҳолатҳо): Тасвирҳои миёна метавонанд кеш шаванд, ва дар ҳолатҳои тағирот танҳо дар марҳилаҳои охирини сохтмон, тамоми раванд аз нав сохтани зарур нест.
- Якумсозии раванд: Сохтани барнома ва эҷоди тасвири 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"]