Dockerisering af en PHP-applikation
Opbyg et Docker-image til PHP + Nginx, og orkestrér det med Docker Compose.
Dockerisering af en PHP-applikation er en gratis PHP Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i PHP Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. PHP Academy-kurset indeholder 4 lektioner i alt.
Hvorfor bruge Docker til PHP?
Docker pakker din applikation sammen med dens afhængigheder i et flytbart container-image. Det samme image kører ens i udvikling, CI og produktion — så problemer med "det virker på min maskine" forsvinder.
Grundlæggende PHP-Dockerfile
En minimal Dockerfile til en PHP- og Nginx-applikation.
# 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/cacheBuild i flere trin
Brug builds i flere trin for at holde det endelige image lille — installér buildværktøjer i ét trin, og kopiér kun artefakterne til det endelige image.
# 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
Orkestrér flere tjenester (PHP-FPM, Nginx, MySQL, 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:Konfiguration af Nginx-container
Montér en tilpasset Nginx-konfiguration for at videresende PHP-FPM-anmodninger.
# 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
Videregiv miljøvariabler til containere — indbyg aldrig hemmeligheder i images.
# docker-compose.yml:
services:
app:
env_file: .env
# or explicit:
environment:
- APP_ENV=production
- DB_HOST=mysqlLaravel Artisan-kommandoer
Kør Artisan-kommandoer i containeren.
$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:workSundhedstjek
Tilføj sundhedstjek, så orkestratorer (Kubernetes, ECS) ved, hvornår containeren er klar.
# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost/health || exit 1Opbygning og upload af images
Byg og upload dit image til et register (Docker Hub, ECR, GHCR).
$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0Kubernetes-udrulning
I Kubernetes skal du definere en Deployment- og en Service-ressource ved hjælp af dit image. Udrul nye versioner med kubectl set image, eller opdatér YAML-filen og anvend den.
Sikring til produktion
Docker-praksis til produktion: brug en bruger, der ikke er root, et skrivebeskyttet root-filsystem, et minimalt base-image (Alpine), ingen udviklingsafhængigheder, fastlås image-tags, og scan efter CVE'er med docker scout.
Opsummering
Opret en Dockerfile til PHP-FPM + Composer. Brug docker-compose til lokal udvikling med Nginx-, MySQL- og Redis-tjenester. Brug i produktion builds i flere trin, indsæt miljøvariabler, og kør via Kubernetes eller ECS.
Hurtigt tjek
Hvad er den største fordel ved Docker-builds i flere trin?
Lær PHP med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 49
- Lektioner
- 195
Ofte stillede spørgsmål
Er lektionen “Dockerisering af en PHP-applikation” gratis?
Ja — hele teksten til “Dockerisering af en PHP-applikation” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af PHP Academy-kurset, skal du opgradere til CoddyKit PRO. PHP Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Dockerisering af en PHP-applikation”?
Opbyg et Docker-image til PHP + Nginx, og orkestrér det med Docker Compose. Du øver dig i PHP Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på PHP Academy?
Der kræves ingen tidligere erfaring. PHP Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Dockerisering af en PHP-applikation”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne PHP Academy-lektion?
Ja. Alle PHP Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Konfiguration af Nginx og PHP-FPM
- Miljøvariabler og .env-filer
- Deployment med GitHub Actions
- Dockerisering af en PHP-applikation