Sobes.tech
Junior — Middle

Jakie cechy mają Dockerfile dla języków wymagających wcześniejszej kompilacji i dla języków interpretowanych?

sobes.tech AI

Odpowiedź od AI

Dla języków z wstępną kompilacją (np. Java, C++), Dockerfile zazwyczaj zawiera etap kompilacji (build stage), w którym kod źródłowy jest kompilowany do plików binarnych, a następnie tworzony jest minimalny obraz do uruchomienia aplikacji. Pozwala to zmniejszyć rozmiar końcowego obrazu i oddzielić proces kompilacji od uruchomienia.

Dla języków interpretowanych (np. Python, JavaScript) Dockerfile najczęściej po prostu kopiuje kod źródłowy i instaluje potrzebne zależności, ponieważ kompilacja nie jest wymagana. W takich przypadkach obraz zawiera interpreter i wszystkie biblioteki potrzebne do uruchomienia aplikacji.

Przykład dla Java (wielostopniowa kompilacja):

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

Przykład dla Pythona:

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