PHP Academy · Lektion

Dockerisering af en PHP-applikation

Opbyg et Docker-image til PHP + Nginx, og orkestrér det med Docker Compose.

Lektion 4 af 413 trin

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

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

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

Sundhedstjek

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 1

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

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

Gratis at komme i gang

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

  1. Konfiguration af Nginx og PHP-FPM
  2. Miljøvariabler og .env-filer
  3. Deployment med GitHub Actions
  4. Dockerisering af en PHP-applikation
← Tilbage til PHP Academy