Basics
Tworzenie pliku Dockerfile¶
Podstawowe elementy tworzenia pliku¶
# Wybiera obraz bazowy
FROM openjdk:21-slim
# Ustawia biężący katalog roboczy wewnątrz kontenera. Wszystkie polecenia (COPY, RUN, ...)
# wykonywane są właśnie w tym katalogu.
WORKDIR /app
# Ustawia zmienną środowiskową
ENV DB_URL=...
ENV APP_NAME=hello-world
ENV SPRING_PROFILES_ACTIVE=deployment
# Kopiuje plik z lokalnego kontekstu budowania do kontenera do folderu ./target
# zmieniając też nazwę pliku na app2.jar
COPY app.jar ./target/app2.jar
Multi-stage build¶
Multi-stage build to technika, która pozwala tworzyć obrazy w kilku etapach, co umożliwia - kompilowanie aplikacji w jednym etapie (z wszystkimi potrzebnymi narzędziami) - skopiowanie tylko gotowych plików binarnych/aplikacyjnych do końcowego, lekkiego obrazu produkcyjnego
# Etap 1: budowanie aplikacji
FROM maven:3.9-eclipse-temurin-17 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests
# Etap 2: tylko gotowy JAR w lekkim obrazie
FROM eclipse-temurin:17-jre AS runtime
WORKDIR /app
# Kopiujemy rezultat z poprzedniego etapu
COPY --from=builder /app/target/my-app.jar ./app.jar
CMD ["java", "-jar", "app.jar"]
Różnice między CMD/RUN/ENTRYPOINT¶
https://www.docker.com/blog/docker-best-practices-choosing-between-run-cmd-and-entrypoint/