Dockerisera en PHP-applikation
Bygg en Docker-avbild för PHP + Nginx och orkestrera med Docker Compose.
Dockerisera en PHP-applikation är en gratis lektion i PHP Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för PHP Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i PHP Academy innehåller totalt 4 lektioner.
Varför Docker för PHP?
Docker paketerar applikationen och dess beroenden i en portabel container image. Samma image körs identiskt i utveckling, CI och produktion — vilket eliminerar problemen med att något bara fungerar på den egna datorn.
Grundläggande Dockerfile för PHP
En minimal Dockerfile för en PHP- och 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/cacheFlerstegsbygge
Använd flerstegsbyggen för att hålla den slutliga imagen liten — installera byggverktyg i ett steg och kopiera endast artefakterna till den slutliga imagen.
# 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
Orkestrera flera tjänster (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 av Nginx-container
Montera en anpassad Nginx-konfiguration för att proxiera PHP-FPM-begäranden.
# 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
Skicka miljövariabler till containers — bädda aldrig in hemligheter i images.
# docker-compose.yml:
services:
app:
env_file: .env
# or explicit:
environment:
- APP_ENV=production
- DB_HOST=mysqlLaravel Artisan-kommandon
Kör Artisan-kommandon inuti containern.
$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:workHälsokontroller
Lägg till hälsokontroller så att orkestrerare (Kubernetes, ECS) vet när containern är redo.
# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
CMD curl -f http://localhost/health || exit 1Bygga och skicka images
Bygg och skicka imagen till ett register (Docker Hub, ECR, GHCR).
$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0Kubernetes-distribution
I Kubernetes definierar ni resurserna Deployment och Service med hjälp av er image. Rulla ut nya versioner med kubectl set image eller uppdatera YAML-filen och tillämpa ändringarna.
Produktionshärdning
Metoder för Docker i produktion: använd en icke-root-användare, ett skrivskyddat rotfilsystem och en minimal basimage (Alpine), ta inte med utvecklingsberoenden, lås image-taggar och sök efter CVE:er med docker scout.
Sammanfattning
Skapa en Dockerfile för PHP-FPM och Composer. Använd docker-compose för lokal utveckling med tjänsterna Nginx, MySQL och Redis. Använd flerstegsbyggen i produktion, injicera miljövariabler och kör via Kubernetes eller ECS.
Snabbkontroll
Vilken är den största fördelen med flerstegsbyggen i Docker?
Lär dig PHP med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 49
- Lektioner
- 195
Vanliga frågor
Är lektionen ”Dockerisera en PHP-applikation” gratis?
Ja – hela texten till ”Dockerisera en PHP-applikation” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i PHP Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i PHP Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Dockerisera en PHP-applikation”?
Bygg en Docker-avbild för PHP + Nginx och orkestrera med Docker Compose. Ni övar på PHP Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig PHP Academy?
Du behöver inga förkunskaper. Utbildningen i PHP Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Dockerisera en PHP-applikation”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här PHP Academy-lektionen?
Ja. Varje PHP Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Konfiguration av Nginx och PHP-FPM
- Miljövariabler och .env-filer
- Distribuera med GitHub Actions
- Dockerisera en PHP-applikation