Eigenes Dockerfile verwenden
Liegt ein Dockerfile im Repository, hat es Vorrang vor der automatischen Erkennung. Damit läuft jede Sprache, die sich in einen Container packen lässt.
Was das Dockerfile mitbringen muss
- Die App muss auf dem Port aus
$PORTlauschen und an0.0.0.0gebunden sein. - Der Startbefehl steht in
CMDoderENTRYPOINT. - Der Container läuft ohne root-Rechte. Schreibzugriff gibt es in
/tmpund im dauerhaften Speicher unter/daten.
Beispiel: Go
FROM golang:1.23 AS build
WORKDIR /src
COPY . .
RUN go build -o /app/server ./cmd/server
FROM gcr.io/distroless/base-debian12
COPY --from=build /app/server /server
CMD ["/server"]
Im Programm dann den Port aus der Umgebung lesen:
port := os.Getenv("PORT")
http.ListenAndServe("0.0.0.0:"+port, nil)Beispiel: PHP mit Laravel
FROM php:8.3-cli
RUN docker-php-ext-install pdo pdo_mysql
WORKDIR /app
COPY . .
CMD php artisan serve --host=0.0.0.0 --port=$PORT
Häufige Fragen
Werden Build-Argumente unterstützt?
Die Umgebungsvariablen der App stehen beim Build zur Verfügung. Geheimnisse gehören trotzdem in die Laufzeitumgebung, nicht ins Image.
Kann ich ein fertiges Image aus einer Registry nutzen?
Derzeit wird aus dem Repository gebaut. Ein Dockerfile mit einer einzigen FROM-Zeile erreicht praktisch dasselbe.