Docker для локальной PHP разработки

В этой статье вы узнаете, что такое Docker и как использовать его для создания переносимого образа для ваших PHP-приложений. Вы узнаете, как использовать непрерывную интеграцию и развертывание (CI/CD) для создания и развертывания образа на Heroku.

Докеризация вашего PHP-приложения полезна, потому что:

  1. Контейнеры портативны и могут быть мгновенно развернуты в любом месте.
  2. Контейнеры обеспечивают разработчикам единообразную и оптимизированную рабочую среду, которой можно легко обмениваться.
  3. Контейнеры — это первый шаг к запуску приложения с высокой доступностью с помощью DockerSwarm или Kubernetes.

Прочитав статью, вы узнаете, что такое Docker и как он работает.  Изучите все тонкости объединения Docker с PHP, а также о том, как использовать непрерывную интеграцию и доставку для тестирования приложения, создания контейнера и его развертывания.

Что такое Докер?

Большинство разработчиков используют стек усилителей (W|L|M)в качестве отправной точки, но эта среда может очень быстро стать подавляющей. Как только вы начнете чувствовать эту боль, вы начнете использовать виртуальную среду для обмена и воспроизведения с легкостью.

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

Что нужно для начала работы

Докер может быть установлен на большинстве платформ. Вы можете установить его из двоичного исполняемого файла или с помощью официального установщика. Если вы используете современные версии Windows или Mac, установите DockerDesktop, и все готово.

Если вы являетесь пользователем Linux, пакеты Docker популярны и обычно включены в репозиторий вашего дистрибутива. Например, установить его на Ubuntu или Debian так же просто, как:

$ apt-get update && apt-get install docker

Изображения докера

Docker основан на концепции создания образов, содержащих необходимое программное обеспечение и конфигурацию для приложений. Мы также можем создавать распространяемые образы, содержащие предварительно настроенное программное обеспечение, такое как сервер Apache, сервер кэширования, база данных MySQL и т. Д. Мы можем поделиться нашим окончательным изображением на DockerHub, чтобы сделать его доступным для всех.

Работа с изображениями Docker

Мы можем перечислить доступные изображения на нашем компьютере, выполнив команду dockerimages.

Docker для локальной PHP разработки

Контейнеры Docker

Мы можем сравнить изображение Docker с определением класса. Мы определяем его свойства и поведение. Контейнеры-это экземпляры, созданные из этого класса. Мы можем создать несколько экземпляров одного и того же изображения. Команда dockerps выводит список контейнеров, запущенных на компьютере. На данный момент у нас нет никаких контейнеров, поэтому давайте создадим новый:

Docker для локальной PHP разработки

Из выходных данных видно, что контейнер имеет идентификатор и имя. Давайте создадим еще один контейнер и назовем его:

Docker для локальной PHP разработки

Теперь мы можем получить доступ к нашему контейнеру, выполнив команду bash и прикрепив ее к нашему терминалу:

Docker для локальной PHP разработки

Чтобы избежать загрязнения нашего компьютера неиспользуемыми контейнерами, обязательно удалите старые:

 

Docker для локальной PHP разработки

Поскольку наш контейнер является сервером Apache, имеет смысл иметь доступ к нему через браузер. При создании образа нам нужно убедиться, что он открыт через определенный порт, мы рассмотрим это более подробно в разделе Dockerfiles.

Docker для локальной PHP разработки

Мы можем получить IP-адрес нашего контейнера с помощью dockerinspect:

Docker для локальной PHP разработки

Последняя часть состоит в том, чтобы сопоставить сервер Apache для запуска нашего приложения вместо домашней страницы Apache по умолчанию. Это означает, что нам нужно синхронизировать папку приложения с корневой папкой сервера (/var/www/html). Мы можем сделать это, используя опцию-v. Вы можете прочитать больше о томах контейнеров в документации Docker:

Docker для локальной PHP разработки

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

Работа с файлами Dockerfiles

Ранее мы упоминали, что каждый может создать образ Docker и поделиться им в центре Docker, и что файлы Docker являются основным инструментом для достижения этой цели. Мы посмотрим, как мы можем настроить наш собственный образ и сделать его соответствующим нашим потребностям. Список доступных команд можно найти в документации.

Измените один каталог на корневой каталог репозитория:

$ cd ..

Образ php:7.4-apache устанавливает общий каталог Apache в /var/www/html. Однако в этом случае, следуя соглашениям Laravel, нам нужно установить его в /var/www/public. Одним из способов достижения этой цели является настройка конфигурации виртуального хоста. Создайте файл 000-default.conf со следующим содержимым:

Docker для локальной PHP разработки

Apache по умолчанию прослушивает порт 80 (HTTP), это не проблема при запуске сервера на вашем компьютере. Но некоторые облачные провайдеры требуют, чтобы контейнеры использовали разные порты.

Мы создадим скрипт для динамического переопределения порта Apache при запуске контейнера. Создайте файл с именем start-apache со следующим содержимым:

Docker для локальной PHP разработки

И убедитесь, что файл является исполняемым:

 

Docker для локальной PHP разработки

Мы собираемся создать готовый к производству образ. Создайте файл с именем Dockerfile. Мы будем использовать предложение FROM для использования официальных изображений phpapache в качестве отправной точки:

Docker для локальной PHP разработки

Теперь нам нужно СКОПИРОВАТЬ файл в изображение:

COPY 000-default.conf /etc/apache2/sites-available/000-default.conf

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

RUN a2enmod rewrite

Чтобы получить исходные файлы внутри контейнера, мы можем снова использовать команду КОПИРОВАНИЯ:

COPYsrc /var/www/
RUNchown-R www-data:www-data /var/www

Последнее, что нам нужно сделать, это запустить сервер Apache в фоновом режиме. Команда CMD должна использоваться только один раз в файле Dockerfile, и она должна иметь следующую форму:

CMD [«executable»,»param1″,»param2″]

Мы вызовем сценарий запуска, который мы создали ранее:

CMD [«start-apache»]

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

Docker для локальной PHP разработки

Полезные команды

Хотя наш образ готов, мы рассмотрим некоторые команды, которые могут быть полезны для многих проектов. Что, если бы мы хотели установить Node.js чтобы управлять нашими передними активами?

Docker для локальной PHP разработки

Это позволит установить Node.js и менеджер npm в нашем образе. Мы можем использовать команду RUN много раз в одном и том же файле Dockerfile, потому что Docker хранит историю создания нашего образа. Каждая команда ЗАПУСКА хранится как фиксация в истории управления версиями.

Еще одна полезная команда-ENV. Он позволяет нам установить переменную среды в процессе сборки, а также будет присутствовать при создании контейнера. Обязательно ознакомьтесь с полным списком поддерживаемых команд в документации.

Docker для локальной PHP разработки

Построение образа

Если вы ранее извлекли базовый образ, он будет загружен с вашего компьютера вместо повторной загрузки. Это означает, что процесс сборки не займет много времени. Наша папка содержит файл Dockerfile, файл 000-default.conf и файл start-apache. Команда dockerbuild создаст файл Docker внутри текущего каталога:

Docker для локальной PHP разработки

Если мы сейчас перечислим наши образы Docker, мы увидим наш новый встроенный образ:

Docker для локальной PHP разработки

В настоящее время у нашего изображения нет имени, опция-t позволяет нам указать хранилище изображений и тег. Давайте пометим изображение собственным именем. Синтаксис таков:

$ dockertagSOURCE_IMAGE:TAGTARGET_IMAGE:TAG

Для изображения, которое мы только что создали, мы можем использовать:

$ dockertag 19c684978566 YOUR_DOCKERHUB_USER/semaphore-demo-php-unsplash

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

Наше изображение теперь помечено и помечено:

Docker для локальной PHP разработки

 

DockerCompose

Использование терминалов и запоминание команд не очень практично для создания контейнеров приложений и быстрого начала работы. DockerCompose использует файлы YAML для настройки и запуска контейнеров. Это означает, что мы можем отправить файл Dockerfile нашего приложения для создания среды и использовать файл docker-compose.yml для запуска контейнеров.

Первым шагом является установка DockerComposer на нашу машину. Следуйте инструкциям в документации Docker, прежде чем выполнять следующие действия.

Мы будем использовать docker-compose для запуска приложения внутри контейнера. Это ускорит разработку, поскольку мы сможем настроить нашу рабочую среду без необходимости установки или настройки сервера Apache.

Мы сопоставим файлы исходного кода с www-корнем контейнера, таким образом, нам не придется перестраивать образ Docker во время кода.

Создайте файл docker-compose.yml со следующим содержимым:

 

 

Docker для локальной PHP разработки

Это позволит создать наш образ, используя другой файл Dockerfile, предназначенный только для разработки, называемый Dockerfile.развитие. Если у вас уже есть образ, созданный локально или на концентраторе Docker, вы можете использовать вместо этого свойство image:

Docker для локальной PHP разработки

В службе webapp мы определим открытые порты, тома и, возможно, некоторые переменные среды.

Docker для локальной PHP разработки

Окончательный docker-compose.yml выглядит следующим образом:

Docker для локальной PHP разработки

В дополнение к переменным Laravel и Apache мы устанавливаем ключ доступа Unsplash из переменных среды, поэтому наше приложение запускается с правильными маркерами API.

Создайте новый файл с именем Dockerfile.development:

Docker для локальной PHP разработки

Основное отличие заключается в том, что Apache запускается с теми же идентификаторами пользователей и групп, что и ваш собственный—если разрешения не совпадают, приложение не будет запущено. Проверьте идентификатор пользователя и идентификатор группы на вашем компьютере ($UID) и идентификатор ГРУППЫ ($GID) и при необходимости замените номера.

Теперь мы можем запустить docker-composer для создания нашего контейнера. Команда прикрепит вывод контейнера к терминалу, и нам нужно будет нажать ctrl+c, чтобы выйти. Мы можем избежать этого, используя опцию-d (docker-composerup-d). Если у нас есть несколько служб, мы можем указать, какая из них (сервер docker-composerup). Наконец, добавьте все новые файлы в свой репозиторий:

Docker для локальной PHP разработки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *