Sobes.tech
Junior — Middle

Ինչպիսի՞ հատկանիշներ ունեն Dockerfile-ները այն լեզուների համար, որոնք պահանջում են նախնական կոմպիլացիա, և այն լեզուների համար, որոնք ինտերպրետացիոն են։

sobes.tech AI

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

Նախապես կոմպիլացված լեզուների համար (օրինակ՝ Java, C++) Dockerfile-ը սովորաբար ներառում է կառուցման փուլ, որտեղ աղբյուրային կոդը կոմպիլացվում է բինարային ֆայլերի, և ապա ստեղծվում է նվազագույն պատկերը ծրագրի գործարկման համար: Սա թույլ է տալիս նվազեցնել վերջնական պատկերի չափը և բաժանել կոմպիլացիայի գործընթացը գործարկումից:

Ինտերպრეტատիվ լեզուների համար (օրինակ՝ Python, JavaScript), Dockerfile-ը սովորաբար պարզապես պատճենում է աղբյուրային կոդը և տեղադրում անհրաժեշտ կախվածությունները, քանի որ կոմպիլացիան անհրաժեշտ չէ: Այդ դեպքերում պատկերը պարունակում է ինտերպրետատորը և բոլոր գրադարանները, որոնք անհրաժեշտ են ծրագրի գործարկման համար:

Օրինակ Java-ի համար (շատշերտային կառուցում):

FROM maven:3.8.5-openjdk-17 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package -DskipTests

FROM openjdk:17-jdk-slim
COPY --from=build /app/target/app.jar /app/app.jar
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

Python-ի համար օրինակ:

FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]