Sobes.tech
Junior — Middle

Կարող եք բացատրել Docker-ում բազմահարթակային հավաքման սկզբունքը և ինչու է այն կիրառվում:

sobes.tech AI

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

Դոկերում բազմաբնակարան (multi-stage build) կառուցվածքը թույլ է տալիս ստեղծել պատկերներ մի քանի փուլով, ինչը օգնում է նվազեցնել վերջնական պատկերների չափը և բարելավել անվտանգությունը:

Իդեան այն է, որ առաջին փուլերում կառուցվում և կոմպիլացվում է հավելվածը՝ օգտագործելով բոլոր անհրաժեշտ գործիքներն ու կախվածությունները, իսկ վերջին փուլում միայն անհրաժեշտ ֆայլերը պատճենվում են նվազագույն հիմնական պատկերին:

Առավելություններ՝

  • Վերջնական պատկերների չափի կրճատում՝ բացառելով կառուցման գործիքները:
  • Բարելավված անվտանգություն՝ քանի որ վերջնական պատկերում ավելորդ գործիքներ չկան:
  • Dockerfile-ի պարզեցում՝ քանի որ բոլոր փուլերը նկարագրված են մեկ ֆայլում:

Օրինակ՝

# Կառուցման փուլ
FROM openjdk:17-jdk AS build
WORKDIR /app
COPY . .
RUN ./gradlew build

# Աշխատանքի փուլ
FROM openjdk:17-jre
WORKDIR /app
COPY --from=build /app/build/libs/myapp.jar ./
CMD ["java", "-jar", "myapp.jar"]

Այստեղ նախ կառուցվում է հավելվածը JDK-ով, իսկ հետո նվազագույն պատկերում՝ JRE-ով՝ պատճենվում է միայն պատրաստի jar ֆայլը։