Sobes.tech
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"]