- Docker. Как за 30 минут создать окружение для php разработки
- Для кого эта статья
- Как все будет работать в итоге
- Почему docker?
- Мой опыт
- Начинаем установку
- Дополнение. Добавляем еще неограниченное кол-во хостов с проектами
- Дополнение. Настройки окружения
- Редактируем конфиг docker-compose для phpmyadmin
- Мой конфиг php.ini
- Если нужен Imagick (php-imagick)
- Подключение к контейнеру веб сервера через SSH
- Заключение
- Опубликовано sergey
- 9 ответов к «Docker. Как за 30 минут создать окружение для php разработки»
Docker. Как за 30 минут создать окружение для php разработки
В этой статье пошагово расскажу как создать рабочее окружение, чтобы развернуть веб проект (lamp) на mac os / windows c помощью Docker используя https://github.com/sprintcube/docker-compose-lamp.
Для кого эта статья
- Для разработчиков, особенно для тех, кто незнаком с docker. Минимум теории, что и как работает, и сразу же получаете готовое окружение
- Для всех других специальностей, кто хочет развернуть полноценный виртуальный web сервер у себя на компьютере и почувствовать себя разработчиком
Как все будет работать в итоге
- Мы установим следующую сборку: PHP (5.4 – 7.4), Apache, MySQL, phpMyAdmin. Сможем зайти из браузера на localhost и запустить ваш проект (или просто в данном случае index.php)
- Будет папка, в которой хранится ваш проект. Т.е. используете ваш любимый IDE для разработки. Со всеми файлами вы работаете из своей родной ОС (mac/windows).
- Докер сделает виртуальный контейнер, в котором запустит необходимую сборку (в нашем случае lamp) и все файлы будут синхронизированы
- Доступны конфиги php.ini, apache, дампы mysql, которые загружаются в виртуальный контейнер docker
- при желании c помощью командной строки можно зайти на виртуальный сервер (контейнер) и сделать при желании там все необходимое (подправить конфиг, запустить команду и тд).
Почему docker?
Можно конечно же установить на саму операционную систему необходимые компоненты, например – php, mysql, nginx/apache. Однако, это не совсем правильно, ввиду того, что среда разработки должна соответствовать среде исполнения вашего приложения. На хостинге это как правило linux, – поэтому и среда разработки должна быть тоже linux.
- Докер уже набрал огромную популярность, почти в любой вакансии разработчика и не важно какого указано требование – уметь пользоваться докером.
- Докер применяется как для разработки, так и для продакшена. Есть множество хостингов для ваших докер контейнеров: https://geekflare.com/docker-hosting-platforms/
- Не важно какая у вас ОС (windows, mac, linux) – установите Докер, сделайте сборку контейнеров и получите рабочее окружение.
- Создавайте под каждый свой проект – уникальное окружение со специфическими конфигурациями, легко делитесь этим окружением с другими разработчиками и им не нужно будет муторно настраивать под каждый проект уникальное окружение.
Исходя из всего вышеперечисленного вот почему я остановился на докер и почему рекомендую обязательно его рассмотреть при разработке.
Мой опыт
Лет 5 назад я начал пользовался vagrant + puphpet, и это было достаточно удобное решение, но столкнувшись однажды с проблемой обновления версии php, а также с проблемой медленной синхронизации файлов mac – я решил перейти на docker. Также его использую когда нужно запустить проект на windows. Но на windows он оказался куда капризней.
Надо сказать, что я сразу не смог разобраться и настроить docker – было несколько этапов взятия. Поэтому я для себя нашел оптимальное решение, с чем и хочу поделиться.
И то я очень много в нем не знаю, docker это очень обширная тема, и разбираться в нем и изучать его можно очень долго.
Начинаем установку
1. Устанавливаем git, чтоб он был доступен из командной строки. Процесс описывать не буду, это легко гуглится.
Затруднений при установке возникнуть не должно, делать все как описано в инструкции по этим ссылкам. Главное чтоб у вас установился Docker desktop, чтобы его иконка отображалась в строке состояния со статусом: is running
В процессе установки на своё усмотрение выделяете необходимое кол-во ядер, памяти и места на женском диске. Для windows не забудьте в настройках указать раздел жесткого диска.
3. Проверяете установился ли Докер. Когда вы установили сам клиент docker – открываете командную строку и вводите:
После выполнения команды должна отобразиться версия докера.
Если все хорошо на этом шаге – то, отлично, переходим дальше!
4. Теперь мы выберем сборку контейнеров для докера и создадим папку, в которой все это будет храниться.
Вообще можно собрать конечно самому сборку и я вначале так и пытался сделать, однако столкнулся с множеством проблем, чтением мануалов. Что привело меня к поиску уже готовой сборки для веб сервера. И я такую нашел: https://github.com/sprintcube/docker-compose-lamp
В нее входят следующие компоненты:
- PHP (вы сами можете выбрать нужную вам 1 из 6 версий. начиная с 5.4 до 7.4)
- Apache
- MySQL
- phpMyAdmin
- Redis
Теперь нужно создать папку куда мы ее скачаем. У меня это – /Users/your_name/Documents/docker/lamp
lamp – это название сборки (в первую очередь для меня, чтобы не забыть)
5. Далее читаем Installation https://github.com/sprintcube/docker-compose-lamp переходим в папку и выкачиваем файлы с репозитория:
cd /Users/your_name/Documents/docker/lamp git clone https://github.com/sprintcube/docker-compose-lamp.git . #Дожидаемся окончания скачивания файлов. git fetch --all git checkout 7.4.x # здесь указываем нужную нам версию php cp sample.env .env # смотрим для справки что содержится в этом файле docker-compose up -d # и эта очень важная строка мы ее разберем в пункте ниже
6. Команда docker-compose up -d
Это команда обращается к пакетному менеджеру docker, скачивает и устанавливает (если еще не установлены) все компоненты которые описаны в docker-compose.yml – собирает их вместе и запускает контейнеры.
В файле docker-compose.yml – вы увидите какие именно это пакеты и как они прописаны. Обязательно откройте этот файл и ознакомьтесь с содержимым!
Первый раз процесс скачивания и установки может быть немного длительным, и в результате в командной строе должно отобразиться:
docker-compose up -d #тут будет отображаться много строк процесса установки Creating 5.7-mysql . done Creating sc-redis . done Creating 7.2.x-webserver . done Creating sc-phpmyadmin . done
Поздравляю! Теперь можете заходить на localhost и отобразиться страничка, которая расположена по адресу /Users/your_name/Documents/docker/lamp/www/index.php
Разумеется, вы ее меняете, закачиваете в папку свой проект и наслаждаешь дальнейшей разработкой!
Дополнение. Добавляем еще неограниченное кол-во хостов с проектами
Т.к. у меня несколько проектов, а настройки веб сервера одни и теже, то вот что я делаю чтобы запускать свои сайты на виртуальных доменах.
1. нужно добавить строчки в /etc/hosts на вашей машине mac (или windows – c:\windows\system32\drivers\etc\hosts), чтоб ваша операционная система понимала по какому адресу обращаться при запросе вашего хоста.
sudo nano /etc/hosts #добавляем строчки с вашими сайтами 127.0.0.1 site1 127.0.0.1 site2
нажимаем ctrl + o, ctrl+x (перезаписываем и сохраняем файл)
2. добавляем в файл конфига /Users/your_name/Documents/docker/lamp/config/vhosts/default.conf следующие строчки, он будет синхронизирован с контейнером Докер.
ServerAdmin webmaster@localhost DocumentRoot "/var/www/html/test1" ServerName test1 AllowOverride all ServerAdmin webmaster@localhost DocumentRoot "/var/www/html/test2" ServerName test2 AllowOverride all
3. Чтобы наши изменения вступили в силу – перезапускаем контейнеры:
docker down docker-compose up -d
Дополнение. Настройки окружения
В процессе разработки порой нужно менять настройки того же php.ini
Все изменения, которые вы прописываете в php.ini, прописывайте в config/php/php.ini – и далее вам нужно обновить этот конфиг (пересобрать контейнеры) уже знакомой командой:
docker down docker-compose up -d
И запуститься ваш контейнер, но уже с примененными новыми настройками.
Во первых таким образом php.ini будет у вас под рукой, и самое удобное – можно быстро применить сделанные настройки на другом компьютере (или с кем-то поделиться настройками вашего проекта)!
Редактируем конфиг docker-compose для phpmyadmin
Указываем контейнеру phpmyadmin наш php.ini добавив строчку в volumes.
volumes: - $:/usr/local/etc/php/conf.d/php-phpmyadmin.ini
Мой конфиг php.ini
memory_limit = 300M post_max_size = 50M upload_max_filesize = 40M max_execution_time = 200
Если нужен Imagick (php-imagick)
# install imagick RUN apt-get -y install libmagickwand-dev RUN pecl install imagick RUN docker-php-ext-enable imagick
docker-compose up -d # run all services docker-compose stop webserver # stop only one. but it still running . docker-compose build --no-cache webserver docker-compose up -d --no-deps # link webserver to other services
Подключение к контейнеру веб сервера через SSH
docker-compose exec webserver bash
Заключение
Надеюсь, эта статья помогла Вам разобраться на начальном этапе с Докер, и у вас получилось развернуть окружение. Если возникли ошибки – пишите в комментариях, я постараюсь помочь, возможно я с ними уже сталкивался.
Опубликовано sergey
9 ответов к «Docker. Как за 30 минут создать окружение для php разработки»
Большое спасибо за статью!
Помогите пожалуйста решить проблему. При запуске контейнера возникает следующая ошибка
2020-10-02T15:04:52.755313Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details). 2020-10-02T15:04:52.757724Z 0 [ERROR] –initialize specified but the data directory has files in it. Aborting. 2020-10-02T15:04:52.757776Z 0 [ERROR] Aborting
Не сталкивался с такой проблемой. Это какая-то ваша бд? Скорей всего ошибка в существующей БД mysql с типом данных. Попробуйте изменить тип данных. Или добавить настройку в docker-compose.yml:
1. docker-compose down
2. Deleted old volumes (if there is no significant data) docker system prune –force –volumes
3. Added command: –disable-partition-engine-check to mysql section in docker-compose.yml
4. Ran it with docker-compose up -d to set it up in background.
Взял отсюда: https://github.com/docker-library/mysql/issues/361
Возникает предупреждения типа Warning: file_put_contents(/var/www/html/dohuze_poisk.txt): failed to open stream: Permission denied in /var/www/html/dohuze_poisk.php on line 33 – в тех местах, где PHP должен производить редактирование файлов. То есть не хватает (или вообще нет) прав для PHP Как это исправить?
Спасибо огромное за статью! Удалось все настроить благодаря ей. До нее на нескольких потерпел неудачу, то одно не работало, то другое. Но я никак не могу настроить xdebug, чтобы он работал с VS code. Перебрал уже несколько вариантов с различных гайдов в интернете, но он не работает хоть тресни!( Скажите не могли бы вы дополнить статью этой темой? Буду очень благодарен!