Олег Марков
Запуск PHP-приложений в Docker
Введение
Docker сегодня стал неотъемлемой частью процесса разработки современных приложений. Если вы являетесь разработчиком PHP и хотите упростить развертывание вашего приложения, а также создать единообразные среды разработки и продакшна, эта статья для вас. Мы обсудим, как использовать Docker для запуска PHP-приложений, создавая изолированные контейнеры, которые легко управлять и переносить. Давайте погрузимся в эту тему и откроем для себя, как Docker может облегчить вашу работу.
Создание Dockerfile и docker-compose для PHP-приложения – это важный шаг, но для масштабирования и управления инфраструктурой этого недостаточно. Если вы хотите детальнее погрузиться в Docker и научиться разворачивать PHP-приложения в кластере Docker Swarm, а также автоматизировать процесс развертывания с помощью Ansible, приходите на наш большой курс Docker + Ansible - с нуля. На курсе 159 уроков и 7 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Основные понятия Docker
Прежде чем приступить к практической части, давайте коротко обсудим, что такое Docker и какие основные компоненты в нем используются. Docker – это платформа для автоматизации разворачивания, масштабирования и управления приложениями в контейнерах. Контейнеры – это изолированные процессы, которые используют одну систему, но имеют свои файловые системы, сети и ресурсы. Контейнеры намного легче виртуальных машин, что делает их идеальными для CI/CD процессов и развертывания приложений.
Пример создания Dockerfile
Dockerfile – это текстовый файл, содержащий команды, которые вы можете использовать для сборки образа Docker. Изучим, как создать Dockerfile для PHP-приложения.
# Используем официальный образ PHP как базу
FROM php:8.0-apache
# Устанавливаем необходимые расширения PHP
RUN docker-php-ext-install mysqli pdo pdo_mysql
# Копируем текущую директорию в /var/www/html в контейнере
COPY . /var/www/html
# Собственно, наш проект будет здесь
WORKDIR /var/www/html
Обратите внимание, как мы используем базовый образ php:8.0-apache, чтобы развернуть Apache + PHP. Затем мы устанавливаем необходимые расширения PHP через docker-php-ext-install. Наконец, мы копируем содержимое текущей рабочей директории в директорию контента веб-сервера внутри контейнера.
Настройка docker-compose
Теперь, когда у нас есть базовый Dockerfile, давайте посмотрим, как мы можем использовать docker-compose для управления контейнерами. docker-compose позволяет вам определять и запускать многоконтейнерные Docker-приложения.
Пример docker-compose.yml:
version: '3.8'
services:
php:
build:
context: .
ports:
- "80:80"
volumes:
- .:/var/www/html
networks:
- app-network
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: exampledb
networks:
- app-network
networks:
app-network:
driver: bridge
В этом примере мы определили два сервиса: php и mysql. Мы используем образ mysql:5.7 для базы данных. Контейнеры связываются через сеть app-network, которая создается автоматически.
Запуск и тестирование
Чтобы запустить наше окружение, вам нужно выдать команду из терминала:
docker-compose up
С этой командой docker-compose создаст и запустит контейнеры, определенные в файле docker-compose.yml. Вскоре вы сможете открыть браузер и перейти по адресу http://localhost, где будет доступно ваше PHP-приложение.
Советы по оптимизации
Оптимизация контейнеров – важный шаг для обеспечения их производительности и управляемости. Советую использовать минимальные базовые образы, чтобы уменьшить размер контейнера. Также помните о необходимости мониторинга ресурсов контейнера и ограничении потребляемых ресурсов, чтобы избежать избыточной загрузки системы.
Заключение
Теперь у вас есть полное представление о том, как запустить PHP-приложение в Docker. Научились выстраивать Dockerfile для нужного окружения и управлять многоконтейнерными приложениями с помощью docker-compose. Использование Docker позволяет создавать масштабируемые, легко разворачиваемые и тестируемые среды, идеально подходящие для быстрой разработки и развертывания приложений. Надеемся, что с этой инструкцией вы сможете с легкостью интегрировать Docker в ваши проекты и упростить процесс их управления.
Docker для PHP-приложений – это удобно, но для реальных проектов нужна автоматизация и оркестрация. На нашем курсе Docker + Ansible - с нуля вы узнаете, как автоматизировать развертывание Docker окружения для PHP-приложений с помощью Ansible и создавать кластеры с Docker Swarm. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Docker прямо сегодня.
Постройте личный план изучения Docker до уровня Middle — бесплатно!
Docker — часть карты развития DevOps
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Docker
Лучшие курсы по теме

Docker и Ansible
Антон Ларичев
Основы Linux
Антон Ларичев