Dockerisere en PHP-applikasjon
Bygg et Docker-avtrykk for PHP + Nginx og orkestrer med Docker Compose.
Dockerisere en PHP-applikasjon er en gratis leksjon i PHP Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i PHP Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i PHP Academy inneholder totalt 4 leksjoner.
Hvorfor Docker for PHP?
Docker pakker applikasjonen med avhengighetene sine i et portabelt containerbilde. Det samme bildet kjører identisk i utvikling, CI og produksjon – dermed unngår du problemer av typen «fungerer på min maskin».
Grunnleggende PHP-Dockerfile
En minimal Dockerfile for en PHP + Nginx-applikasjon.
# Dockerfile
FROM php:8.3-fpm-alpine
# Install extensions
RUN docker-php-ext-install pdo pdo_mysql opcache
# Install Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .
RUN chown -R www-data:www-data /app/storage /app/bootstrap/cacheFlerstegsbygging
Bruk flerstegsbygginger for å holde sluttbildet lite – installer byggeverktøy i ett trinn, og kopier bare artefakter til sluttbildet.
# Stage 1: builder
FROM composer:2 AS builder
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
# Stage 2: runtime
FROM php:8.3-fpm-alpine
WORKDIR /app
COPY --from=builder /app/vendor ./vendor
COPY . .docker-compose.yml
Orkestrer flere tjenester (PHP-FPM, Nginx, MySQL og Redis) med Docker Compose.
# docker-compose.yml
services:
app:
build: .
volumes:
- .:/app
nginx:
image: nginx:alpine
ports: ["80:80"]
volumes:
- .:/app
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
mysql:
image: mysql:8
environment:
MYSQL_DATABASE: myapp
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:Konfigurasjon av Nginx-container
Monter en egendefinert Nginx-konfigurasjon for å videresende PHP-FPM-forespørsler.
# docker/nginx.conf
server {
listen 80;
root /app/public;
index index.php;
location / { try_files $uri /index.php?$query_string; }
location ~ \.php$ {
fastcgi_pass app:9000; # service name from docker-compose
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}Miljøvariabler
Send miljøvariabler til containere – legg aldri hemmeligheter inn i images.
# docker-compose.yml:
services:
app:
env_file: .env
# or explicit:
environment:
- APP_ENV=production
- DB_HOST=mysqlLaravel Artisan-kommandoer
Kjør Artisan-kommandoer inne i containeren.
$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:workHelsetilstandskontroller
Legg til helsetilstandskontroller slik at orkestratorer (Kubernetes og ECS) vet når containeren er klar.
# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost/health || exit 1Bygging og publisering av images
Bygg og publiser imaget ditt til et register (Docker Hub, ECR eller GHCR).
$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0Kubernetes Deployment
I Kubernetes definerer du en Deployment- og Service-ressurs som bruker imaget ditt. Rull ut nye versjoner med kubectl set image, eller oppdater YAML-filen og bruk den.
Sikring for produksjon
Praksis for Docker i produksjon: bruk en bruker som ikke er root, et skrivebeskyttet rotfilsystem og et minimalt baseimage (Alpine), unngå utviklingsavhengigheter, lås image-tagger og skann etter CVE-er med docker scout.
Sammendrag
Opprett en Dockerfile for PHP-FPM + Composer. Bruk docker-compose til lokal utvikling med Nginx-, MySQL- og Redis-tjenester. I produksjon bruker du flerstegsbygginger, injiserer miljøvariabler og kjører via Kubernetes eller ECS.
Hurtigsjekk
Hva er den viktigste fordelen med flerstegsbygginger i Docker?
Lær deg PHP med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 49
- Leksjoner
- 195
Ofte stilte spørsmål
Er leksjonen «Dockerisere en PHP-applikasjon» gratis?
Ja – hele teksten i «Dockerisere en PHP-applikasjon» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av PHP Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i PHP Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Dockerisere en PHP-applikasjon»?
Bygg et Docker-avtrykk for PHP + Nginx og orkestrer med Docker Compose. Du øver på PHP Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med PHP Academy?
Ingen tidligere erfaring er nødvendig. PHP Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Dockerisere en PHP-applikasjon»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne PHP Academy-leksjonen?
Ja. Alle PHP Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Konfigurere Nginx og PHP-FPM
- Miljøvariabler og .env-filer
- Distribuere med GitHub Actions
- Dockerisere en PHP-applikasjon