0Pricing
PHP Academy · Урок

Контейнеризация приложения PHP

Создайте образ Docker для PHP и Nginx и управляйте ими с помощью Docker Compose

«Контейнеризация приложения PHP» — бесплатный урок PHP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Зачем Docker нужен для PHP?

Docker упаковывает приложение вместе с его зависимостями в переносимый образ контейнера. Один и тот же образ одинаково работает в разработке, непрерывной интеграции и production, устраняя проблемы в духе «у меня на машине работает».

Базовый Dockerfile для PHP + Nginx

Минимальный Dockerfile для приложения 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

Многоэтапная сборка

Используйте многоэтапные сборки, чтобы уменьшить размер итогового образа: устанавливайте инструменты сборки на одном этапе, а в итоговый образ копируйте только артефакты.

# 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

Оркестрируйте несколько служб (PHP-FPM, Nginx, MySQL, Redis) с помощью 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:

Конфигурация контейнера Nginx

Подключите пользовательскую конфигурацию Nginx, чтобы проксировать запросы к PHP-FPM.

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

Переменные окружения

Передавайте переменные окружения контейнерам — никогда не встраивайте секреты в образы.

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

Команды Artisan Laravel

Запускайте команды Artisan внутри контейнера.

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

Проверки состояния

Добавляйте проверки состояния, чтобы системы оркестрации (Kubernetes, ECS) знали, когда контейнер готов.

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

Сборка и отправка образов

Собирайте и отправляйте свой образ в реестр (Docker Hub, ECR, GHCR).

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

Развертывание в Kubernetes

В Kubernetes определите ресурсы Deployment и Service, используя свой образ. Выпускайте новые версии с помощью kubectl set image или обновите YAML и примените его.

Усиление защиты production-среды

Практики для production в Docker: используйте пользователя без прав root, файловую систему корня только для чтения, минимальный базовый образ (Alpine), не устанавливайте зависимости для разработки, фиксируйте теги образов и сканируйте их на наличие уязвимостей CVE с помощью docker scout.

Итоги

Создайте Dockerfile для PHP-FPM + Composer. Используйте docker-compose для локальной разработки со службами Nginx, MySQL и Redis. В production применяйте многоэтапные сборки, передавайте переменные окружения и запускайте приложение через Kubernetes или ECS.

Быстрая проверка

Каково главное преимущество многоэтапных сборок Docker?

Часто задаваемые вопросы

Урок «Контейнеризация приложения PHP» бесплатный?

Да — полный текст урока «Контейнеризация приложения PHP» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Контейнеризация приложения PHP»?

Создайте образ Docker для PHP и Nginx и управляйте ими с помощью Docker Compose Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Контейнеризация приложения PHP»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Настройка Nginx и PHP-FPM
  2. Переменные окружения и файлы .env
  3. Развёртывание с GitHub Actions
  4. Контейнеризация приложения PHP
← Назад к PHP Academy