Middle
Ինչ է Docker-ի բազմաբնակարանային հավաքածուները և ինչպես են նրանք աշխատում?
sobes.tech AI
Պատասխան AI-ից
Շատ փուլային շինարարությունները թույլ են տալիս օգտագործել մի քանի ժամանակավոր պատկերի Docker շինարարության ընթացքում՝ ստանալու վերջնական, օպտիմալացված պատկերը:
Ինչպես է դա աշխատում՝
- Քայլերի բաժանում: Շինարարական գործընթացը բաժանվում է մի քանի փուլերի (
FROM), որոնցից յուրաքանչյուրը ժառանգում է իր սեփական բազային պատկերը: - Արտադրանքի պատճենում: Նախորդ փուլերում ստեղծված ֆայլերը և արհեստականները պատճենվում են հաջորդ փուլերին
COPY --from=<փուլի անունը կամ թիվը>հրամանի միջոցով: - Վերջնական պատկերը: Վերջնական պատկերը ստեղծվում է վերջին փուլից: Այն պարունակում է միայն այն ֆայլերը, որոնք հստակ պատճենվել են նախորդ փուլերից: Միջանկյալ շերտերը և գործիքները, որոնք օգտագործվել են սկզբնական փուլերում կոմպիլյացիայի կամ թեստավորման համար, չեն ներառվում վերջնական պատկերի մեջ:
Առավելություններ՝
- Պատկերի չափի նվազեցում: Վերջնական պատկերը պարունակում է միայն այն ֆայլերը, որոնք անհրաժեշտ են ծրագրի գործարկման համար:
- Անվտանգության բարելավում: Կառուցման գործիքները, կոմպիլյատորները և այլ հնարավոր խոցելի բաղադրիչները չեն ներառվում վերջնական պատկերի մեջ:
- Շինարարության արագացում: Միջանկյալ շերտերը կարող են կեշավորվել:
- Dockerfile-ի մաքուրություն: Բաղադրիչների տարբեր փուլերը (կոմպիլյացիա, թեստավորում, փաթեթավորում) տրամաբանականորեն բաժանված են:
Օրինակ՝
# Շինարարական փուլ՝ ծրագրի կոմպիլյացիա
FROM golang:1.20 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o myapp .
# Օգտագործման փուլ՝ ծրագրի գործարկում
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
CMD ["/app/myapp"]