Junior — Middle
Aké vlastnosti majú Dockerfile pre jazykov, ktoré vyžadujú predbežnú kompiláciu, a pre interpretované jazyky?
sobes.tech AI
Odpoveď od AI
Pre jazykov s predbežnou kompiláciou (napríklad Java, C++), Dockerfile zvyčajne obsahuje fázu build, kde sa zdrojový kód skompiluje do binárnych súborov, a potom sa vytvorí minimálny obraz na spustenie aplikácie. To umožňuje znížiť veľkosť konečného obrazu a oddeliť proces kompilácie od spustenia.
Pre interpretované jazyky (napríklad Python, JavaScript) Dockerfile zvyčajne iba skopíruje zdrojový kód a nainštaluje potrebné závislosti, pretože kompilácia nie je potrebná. V takýchto prípadoch obraz obsahuje interpret a všetky knižnice potrebné na spustenie aplikácie.
Príklad pre Java (viacstupňová kompilácia):
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"]
Príklad pre Python:
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]