логотип PurpleSchool
логотип PurpleSchool

Запуск PHP-приложений в Docker

Автор

Олег Марков

Введение

Docker сегодня стал неотъемлемой частью процесса разработки современных приложений. Если вы являетесь разработчиком PHP и хотите упростить развертывание вашего приложения, а также создать единообразные среды разработки и продакшна, эта статья для вас. Мы обсудим, как использовать Docker для запуска PHP-приложений, создавая изолированные контейнеры, которые легко управлять и переносить. Давайте погрузимся в эту тему и откроем для себя, как Docker может облегчить вашу работу.

Основные понятия 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 в ваши проекты и упростить процесс их управления. Успешной контейнеризации!

Карта развития разработчика

Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile