PHP Academy · Lektion

Dockerisera en PHP-applikation

Bygg en Docker-avbild för PHP + Nginx och orkestrera med Docker Compose.

Lektion 4 av 413 steg

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/cache

Flerstegsbygge

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=mysql

Laravel 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:work

Hä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 1

Bygga 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.0

Kubernetes-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?

Gratis att börja

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

  1. Konfiguration av Nginx och PHP-FPM
  2. Miljövariabler och .env-filer
  3. Distribuera med GitHub Actions
  4. Dockerisera en PHP-applikation
← Tillbaka till PHP Academy