0Pricing
PHP Academy · Lekcja

Konteneryzacja aplikacji PHP za pomocą Dockera

Zbuduj obraz Dockera dla PHP i Nginx oraz zarządzaj nim za pomocą Docker Compose

Konteneryzacja aplikacji PHP za pomocą Dockera to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.

Dlaczego Docker dla PHP?

Docker pakuje aplikację wraz z zależnościami do przenośnego obrazu kontenera. Ten sam obraz działa identycznie w środowisku programistycznym, CI i produkcyjnym, eliminując problemy typu „u mnie działa”.

Podstawowy Dockerfile dla PHP

Minimalny Dockerfile dla aplikacji PHP + Nginx.

# 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

Budowanie wieloetapowe

Należy używać budowania wieloetapowego, aby zmniejszyć końcowy obraz — narzędzia do budowania należy instalować na jednym etapie, a do obrazu końcowego kopiować tylko artefakty.

# 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

Docker Compose umożliwia orkiestrację wielu usług (PHP-FPM, Nginx, MySQL, Redis).

# 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:

Konfiguracja kontenera Nginx

Należy zamontować niestandardową konfigurację Nginx, aby przekazywać żądania PHP-FPM przez serwer proxy.

# 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;
    }
}

Zmienne środowiskowe

Zmienne środowiskowe należy przekazywać do kontenerów — nigdy nie należy osadzać sekretów w obrazach.

# docker-compose.yml:
services:
  app:
    env_file: .env
    # or explicit:
    environment:
      - APP_ENV=production
      - DB_HOST=mysql

Polecenia Laravel Artisan

Polecenia Artisan należy uruchamiać wewnątrz kontenera.

$ docker compose exec app php artisan migrate
$ docker compose exec app php artisan config:cache
$ docker compose exec app php artisan queue:work

Kontrole poprawności działania

Należy dodać kontrole poprawności działania, aby narzędzia orkiestrujące (Kubernetes, ECS) wiedziały, kiedy kontener jest gotowy.

# Dockerfile:
HEALTHCHECK --interval=30s --timeout=5s \
  CMD curl -f http://localhost/health || exit 1

Budowanie i wypychanie obrazów

Należy zbudować obraz i wypchnąć go do rejestru (Docker Hub, ECR, GHCR).

$ docker build -t myorg/myapp:1.0.0 .
$ docker push myorg/myapp:1.0.0

Wdrażanie w Kubernetes

W Kubernetes należy zdefiniować zasoby Deployment i Service korzystające z danego obrazu. Nowe wersje można wdrażać za pomocą kubectl set image albo aktualizując plik YAML i stosując go.

Wzmacnianie zabezpieczeń produkcji

Praktyki Docker dla środowiska produkcyjnego: używanie użytkownika bez uprawnień administratora, system plików główny tylko do odczytu, minimalny obraz bazowy (Alpine), brak zależności deweloperskich, przypinanie tagów obrazów oraz skanowanie pod kątem CVE za pomocą docker scout.

Podsumowanie

Należy utworzyć Dockerfile dla PHP-FPM i Composer. Do lokalnego programowania należy używać docker-compose z usługami Nginx, MySQL i Redis. W środowisku produkcyjnym należy stosować budowanie wieloetapowe, wstrzykiwać zmienne środowiskowe i uruchamiać aplikację za pomocą Kubernetes lub ECS.

Szybkie sprawdzenie

Jaka jest główna korzyść z wieloetapowego budowania obrazów Docker?

Często zadawane pytania

Czy lekcja „Konteneryzacja aplikacji PHP za pomocą Dockera” jest bezpłatna?

Tak — pełny tekst „Konteneryzacja aplikacji PHP za pomocą Dockera” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Konteneryzacja aplikacji PHP za pomocą Dockera”?

Zbuduj obraz Dockera dla PHP i Nginx oraz zarządzaj nim za pomocą Docker Compose Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć PHP Academy?

Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Konteneryzacja aplikacji PHP za pomocą Dockera”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?

Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfiguracja Nginx i PHP-FPM
  2. Zmienne środowiskowe i pliki .env
  3. Wdrażanie za pomocą GitHub Actions
  4. Konteneryzacja aplikacji PHP za pomocą Dockera
← Powrót do PHP Academy