Быстрый старт с Docker в PhpStorm

Последнее обновление: 09.02.2019 г.
Публикация: 09.02.2019 г.
Информация

Это руководство является вольным переводом поста из блога PhpStorm со значительными дополнениями и описывает детали начала использования ПО Docker в связке с PhpStorm.

Итак, сегодня ты решил попробовать что-то новое и начать проект с нуля. Твоим первым шагом будет настройка среды разработки: как минимум, ты захочешь запустить веб-сервер и интерпретатор PHP (желательно — с установленным движком отладки).

С помощью Docker ты можешь начать разработку, запуск и отладку кода за считанные минуты!

Docker: Логотип ПО

Вероятно, самый простой способ интеграции Docker с PhpStorm — это использование данной страницы публичного реестра Docker Hub. Она представляет собой набор предварительно настроенных образов Docker, курируемых командой PhpStorm, которые охватывают наиболее распространённые потребности разработки на PHP.

Прежде чем продолжить, убедись, что у тебя на компьютере установлен Docker. Если у тебя его нет, то прочитай, как его установить на Windows или macOS.

Далее руководство описывает работу с Docker с помощью приложения Docker Desktop под Windows c использованием Linux контейнеров. Чтобы двигаться дальше, тебе следует использовать такое же окружение.

Заметка

Docker Desktop — это новое приложение, которое пришло на смену устаревшему приложению Docker Toolbox. Docker Desktop для работы использует систему виртуализации Hyper-V от Windows, а Docker Toolbox использует VirtualBox от Oracle. Нативная виртуализация Hyper-V для Windows работает быстрее и надежнее, чем VirtualBox.

Стоит отметить, что после включения службы Hyper-V пропадёт возможность запускать и создавать x64 виртуальные машины на VirtualBox. Другими словами, ты можешь использовать либо Docker Desktop, либо Docker Toolbox. В последнем используется виртуальная машина на VirtualBox с минималистичным Linux окружением. Хотя Docker Toolbox и признан устаревшим, работа с ним слабо отличается от Docker Desktop.


1. Необходимые условия

Во-первых, тебе следует добавить нового локального пользователя в систему, эта новая учётная запись в будущем будет использоваться ПО Docker. Для этого нажми горячие клавиши Win + R и введи следующую команду в открывшемся окне:

lusrmgr.msc

Нажми Enter. Затем в левой части открывшегося окна выбери группу Пользователи. Теперь в списке пользователей (средняя часть окна), используя контекстное меню, выбери Новый пользователь..., как на скриншоте ниже.

Windows 10: программа "Локальные пользователи и группы"

Задай для нового пользователя, например, следующие параметры:

Windows 10: окно "Новый пользователь"

Чтобы назначить группу для нового пользователя, кликни правой кнопкой мыши на его имени и выбери пункт Свойства. Затем, на вкладке Членство в группах нажми кнопку Добавить, набери docker-users и нажми Ок. Готово, теперь этот пользователь будет иметь только те права, которые необходимы для работы ПО Docker.

Если с созданием нового пользователя возникли трудности, то тебе также может помочь следующая справка Windows: Создание учётной записи локального пользователя или администратора в Windows 10.

Во-вторых, убедись, что Docker доступен для связи через порт 2375. Для этого в разделе General настроек приложения Docker Desktop включи опцию Expose daemon on tcp://localhost:2375 without TLS option, как на скриншоте ниже.

Docker Desktop: раздел настроек "General"

В-третьих, с помощью пункта главного меню PhpStorm [File → Settings → Build, Execution, Deployment → Docker] установи параметры доступа к Docker API. Главное здесь это указать способ подключения к демону Docker. Выбери переключатель TCP socket, а в поле Engine API URL укажи следующее значение (если его ещё там нет):

tcp://localhost:2375
Заметка

Параметры подключения зависят от используемой версии Docker и операционной системы. Дополнительные сведения по этому вопросу ты можешь узнать из следующей справки PhpStorm: Настройки соединения с Docker.

IDE автоматически проверит твои настройки и покажет сообщение Connection successful в случае успешного подключения к Docker API. Оно должно появиться в нижней части диалогового окна, под окном сопоставления путей, как на скриншоте ниже.

PhpStorm: окно настроек раздела "Docker"

Также в подразделе [Build, Execution, Deployment → Docker → Tools] настроек PhpStorm обязательно укажи или проверь актуальность указанных путей исполняемых файлов:

  • docker-machine.exe (поле Docker Machine executable)
  • docker-compose.exe (поле Docker Compose executable)

Если возникли сложности в этом вопросе, то изучи справку PhpStorm: Инструменты Docker.

Все действия, описанные здесь, были воспроизведены с корректными ожидаемыми результатами при следующем технологическом окружении:

2. Определение окружения

Для начала создай новый проект в PhpStorm. Затем добавь в его корень новый файл с именем docker-compose.yml. Он позволяет описать конфигурацию сервисов твоего приложения для утилиты Docker Compose с помощью YAML формата.

Заметка

Docker Compose — это CLI инструмент для автоматизации процесса создания и выполнения приложений, скомпонованных из нескольких Docker-контейнеров.

В данном случае будет задействован один сервис — веб-сервер:

version: '2'
services:
  webserver:
    image: phpstorm/php-71-apache-xdebug-26
    ports:
      - "80:80"
    volumes:
      - ./:/var/www/html
    environment:
      XDEBUG_CONFIG: remote_host=host.docker.internal

Как ты мог заметить, в этом конфиге используется предварительно настроенный образ Docker, содержащий веб-сервер Apache и PHP 7.1 с расширением Xdebug.

Обрати внимание, что для настройки Xdebug в директиве remote_host используется значение host.docker.internal для ссылки на удалённый адрес хоста. В Docker для Windows и macOS он автоматически преобразуется во внутренний адрес хоста, позволяя легко подключиться к нему из контейнера.

Внимание

Значение host.docker.internal на Linux в настоящее время не поддерживается. Вместо этого ты можешь использовать имя хоста своей локальной машины (чтобы его узнать, введи в терминале команду hostname).

Соответствующий раздел конфигурации окружения для Linux будет выглядеть следующим образом:

    environment:
      XDEBUG_CONFIG: remote_host=<hostname>

Для получения более подробной информации по этому вопросу, смотри сюда.

Конфигурация окружения полностью готова.

PhpStorm: файл конфигурации для инструмента "Docker Compose"

Теперь ты можешь использовать её с помощью Docker Compose, создав специальную конфигурацию запуска или отладки в PhpStorm.

3. Создание конфигурации запуска или отладки

Сделай клик правой кнопкой мыши на файле docker-compose.yml и выбери пункт Create... из контекстного меню:

PhpStorm: пункт "Create 'docker-compose.yml...'" из контекстного меню

В открывшемся диалоговом окне задай имя конфигурации, например, Start application. Затем сделай необходимые правки и сохрани конфигурацию запуска с параметрами, как на скриншоте ниже:

PhpStorm: окно создания конфигурации "Docker-compose"

Теперь у тебя появилась возможность запускать данную конфигурацию с помощью панели инструментов, расположенной в верхней части IDE:

PhpStorm: старт конфигурации запуска на панели инструментов

Первый запуск данной конфигурации, скорее всего, будет довольно длительным, тебе придётся немного подождать. Дело в том, что образ, указанный в docker-compose.yml наверняка отсутствует в твоей системе, следовательно, он будет скачен из Docker Hub, на это и требуется дополнительное время. Позже он всегда будет использоваться для того, чтобы развернуть необходимый контейнер.

Если ранее, в разделе Shared Drives настроек приложения Docker Desktop, ты не настроил диски, которые должны быть доступны для контейнеров, то получишь следующее уведомление:

Windows 10: уведомление о доступе к диску от Docker Desktop

Нажми в нём кнопку Share it. Затем должно появиться окно File Sharing. В нём тебе следует ввести имя и пароль ранее созданного пользователя, затем нажми OK.

Windows 10: окно "File Sharing"

Скорее всего, тебе также потребуется добавить исключение в используемый брандмауэр.

Windows 10: оповещение системы безопасности

В итоге PhpStorm должен автоматически загрузить нужный образ, развернуть на его основе необходимый контейнер и запустить веб-сервер:

PhpStorm: окно инструмента "Docker"
Заметка

На самом деле, в итоге будут загружены 2 образа: docker4w/nsenter-dockerd и phpstorm/php-71-apache-xdebug-26, смотри скриншот выше. Первый не указан в конфигурации окружения для Docker Compose, cчитай его служебным, он используется для настройки монтирования файловой системы в Docker Desktop.

Теперь всё готово для запуска и отладки кода.


4. Запуск или отладка кода

Убедись, что всё работает как надо. Для этого создай самый простой PHP файл и попробуй отладить его, следуя подходу PhpStorm Zero-Configuration Debugging.

<?php
/**
 * Created by PhpStorm.
 * User: pupkin
 */
echo 'Hello World!';

Поскольку Xdebug уже установлен и настроен, тебе нужно лишь сделать следующее:

  • Установить и включить расширение отладки для браузера: Google Chrome: расширение "Xdebug helper"
  • Установить точку останова в коде: PhpStorm: Точка останова в коде
  • Включить прослушивание входящих отладочных соединений в PhpStorm: PhpStorm: старт конфигурации отладки на панели инструментов

Теперь, просто открой страницу в браузере, и сеанс отладки будет запущен автоматически:

Окно сеанса отладки, код с точкой останова, браузер

В данном руководстве был рассмотрен очень простой случай, но ты можешь использовать описанный метод, чтобы предоставить своей среде, например, базу данных или сервер SFTP. Далее, дополнительно, попробуй изучить страницу PhpStorm реестра Docker Hub. Использование образов Docker от команды PhpStorm сэкономит тебе много усилий и позволит начать кодирование в считанные минуты.

Заметка

Чтобы узнать больше о Docker и о том, как его использовать в PhpStorm, обязательно ознакомься с отличной обучающей серией уроков от Pascal Landau и документацией PhpStorm.

Контрольные вопросы
Источники и дополнительные материалы