PHP Academy · leksjon

Dockerisere en PHP-applikasjon

Bygg et Docker-avtrykk for PHP + Nginx og orkestrer med Docker Compose.

Leksjon 4 av 413 trinn

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

Flerstegsbygging

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

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

Helsetilstandskontroller

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 1

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

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

Gratis å komme i gang

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

  1. Konfigurere Nginx og PHP-FPM
  2. Miljøvariabler og .env-filer
  3. Distribuere med GitHub Actions
  4. Dockerisere en PHP-applikasjon
← Tilbake til PHP Academy