Имеете ли вы опыт работы с Docker?

«Имеете ли вы опыт работы с Docker?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, активно использую Docker для создания воспроизводимых сред разработки, сборки приложений и настройки CI/CD пайплайнов.

Пример Dockerfile для PHP-приложения (Laravel):

# Используем многостадийную сборку для оптимизации
FROM composer:2 AS vendor
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader --no-interaction

FROM php:8.2-fpm-alpine AS application

# Устанавливаем системные зависимости и PHP-расширения
RUN apk add --no-cache 
    libzip-dev 
    postgresql-dev 
    && docker-php-ext-install pdo_pgsql pdo_mysql zip opcache

# Копируем зависимости Composer и исходный код
COPY --from=vendor /app/vendor /var/www/html/vendor
COPY . /var/www/html

# Настраиваем права и рабочую директорию
WORKDIR /var/www/html
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache

# Копируем конфигурацию PHP
COPY ./docker/php/conf.d/opcache.ini /usr/local/etc/php/conf.d/

CMD ["php-fpm"]

Мой стек и практики:

  • Orchestration: Использую docker-compose.yml для описания всего стека приложения (PHP-FPM, Nginx, PostgreSQL, Redis, очередь).
  • Volumes: Настраиваю volumes для persistence данных БД и синхронизации кода в development.
  • Networks: Создаю изолированные сети для сервисов.
  • CI/CD: В GitLab CI или GitHub Actions использую Docker для сборки образа приложения, его тегирования и пуша в registry, а затем деплоя на сервер.
  • Production: Для продакшена изучал и применял Docker Swarm и Kubernetes для оркестрации, настройки health checks, ресурсных лимитов и секретов.