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"]