Docker — это платформа для разработки, развертывания и запуска приложений в изолированных средах (контейнерах). Контейнеры включают все необходимое для работы приложения: код, runtime, системные инструменты, библиотеки и настройки.
# Используем официальный образ PHP с Apache
FROM php:8.2-apache
# Устанавливаем системные зависимости
RUN apt-get update && apt-get install -y \
git \
libzip-dev \
unzip \
&& docker-php-ext-install zip pdo_mysql
# Устанавливаем Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Копируем код приложения
COPY . /var/www/html/
# Устанавливаем зависимости
RUN composer install --no-dev --optimize-autoloader
# Настраиваем Apache
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN a2enmod rewrite
# Порт, который будет слушать контейнер
EXPOSE 80
# Сборка образа
docker build -t my-php-app .
# Запуск контейнера
docker run -p 8080:80 --name my-app-container my-php-app
version: '3.8'
services:
app:
build: .
ports:
- "8080:80"
volumes:
- .:/var/www/html
depends_on:
- db
- redis
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
mysql_data:
# Этап сборки
FROM php:8.2-cli as builder
COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloader
# Финальный образ
FROM php:8.2-apache
COPY --from=builder /app /var/www/html
.dockerignore
vendor
и node_modules
RUN useradd -m appuser && chown -R appuser /var/www/html
USER appuser
RUN pecl install xdebug && docker-php-ext-enable xdebug
COPY xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
Пример xdebug.ini:
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
# Просмотр запущенных контейнеров
docker ps
# Просмотр логов
docker logs -f my-app-container
# Вход в контейнер
docker exec -it my-app-container bash
# Остановка и удаление
docker stop my-app-container && docker rm my-app-container
# Очистка системы
docker system prune -a
.dockerignore
для исключения ненужных файловDocker революционизирует процесс разработки PHP-приложений, обеспечивая консистентность сред и упрощая развертывание. Правильно настроенный Docker-контейнер для PHP включает оптимизированный образ, все необходимые расширения и интеграцию с другими сервисами (БД, кеш), что значительно ускоряет разработку и снижает эксплуатационные риски.