Pull to refresh

Comments 16

статья явно не для тех кто хочет научиться
поднять проект на PHP в Docker под Windows
, так как из описания вообще не понял где там именно PHP проект, а хотелось бы почитать про все шаги, которые позволят вывести хелло ворлд или как в любом другом первом туториале
Да, требуется некоторый бекграунд. И новичкам тоже подойдет, статья без воды. Для новичков: скачайте реп, запустите first/docker/run.bat Все! Профит! Проект запущен. Скрипт в паблике first/public/index.php Все куда проще, чем кажется
Как минимум стоило добавить инструкцию по подключению xdebug.
Это все же один из основных инструментов. Люди с ним могут долго ковыряться.
Ну это уже сверх необходимого. Сейчас, когда рука тянется к бебагеру я себя останавливаю. Это означает провал и поражение, необходимо в правильных местах расставить логирование. На проде у вас не будет дебагера, а проблему срочно надо решить… Все это имхо, разумется
Когда один пишешь, м.б. и не надо.
А когда команда из 62 человек, гигабайты кода, терабайты данных…

Спорно. Логировать всё смысла нет вообще, а log_level=DEBUG и на проде не будет.

Ну про логировать все подряд я нигде не писал. Правильная расстановка логирования вещь с первого взгляда не всегда очевидная. Часто логируют мусор, игнорируя важные для отладки данные. В случае проблемна проде легко переключить уровень логирования. Ну к теме статьи это уже не имеет никакого отношения

Где же была эта статья неделю назад… Пришлось угробить 2 дня и с 3-го подхода проекты были подняты и под windows. От себя добавлю, если у вас все работает под linux, но выдаёт рандомные ошибки, то выполните(я все выполнял в PowerShell) для всех dockerfile и всех sh файлов, которые участвуют в сборке образов


dos2unix Диск:/путь/до_файла

А так же надо помнить о разнице в сетевом окружении между Linux и Windows. В Linux внутренняя сеть докера видна снаружи системы, а в Windows она за NAT'ом(Docker vEthernet) и не видна снаружи, и это приводит к проблеме с Xdebug, так как remote_connect_back=1 не работает в принципе. Если кто то знает как пробросить трафик из внутренней сети во внешнюю, напишите.


Для нашей компании мы выбрали следующее решение:


  • Создал папку mods_available
  • В Dockerfile добавил строку
    ADD ./mods_available/*.ini /etc/php/7.0/mods_available/
  • в корне проекта добавили в .gitignore запись игнорить все файлы ini в mods_available
  • В папку положил .gitkeep и xdebug.ini.dist

Содержимое xdebug.ini.dist


zend_extension=xdebug.so # или как там, не помню на память 
xdebug.remote_autostart = 0
xdebug.remote_enable = 1
xdebug.remote_host = 10.0.75.1 # Сюда написать IP хоста, из виртуального адаптера docker'а 
xdebug.remote_mode = "req"
xdebug.remote_port = 9000
xdebug.idekey = "PHPSTORM"

Если надо использовать xdebug, надо просто скопировать и переименовать xdebug.ini.dist в xdebug.ini и прописать в него свой IP. Это будет работать и в Windows и Linux. И даёт возможность не вносить изменения в файлы под git'ом.


И да все это работает на windows 10 под Hyper-v, без VirtualBox и др.

В PHPSTORM при настройке надо будет ввести вместо bridge название сети для контейнера с PHP.
Посмотреть можно командой docker network ls
Если вы мне это написали специально, то я знаю как настроить докер.
Пользуюсь им постоянно при разработке. И у меня MacOS
Вам). Но если вам не надо, то может еще кому пригодится, мне бы вот пригодилось.
Проблема: невозможно хранить файлы БД на локальном диске. Это следует принять как аксиому под Windows и попытаться найти приемлемое решение, чтобы данные хранились вне контейнера. Для Windows это — named volume. Всего пара строк решает эту проблему

В этом есть и правда и ложь.
Если у вас GPT то монтирование локальной папки с базой не отличается от монтирования других папок.
А вот если у вас MBR то следующая строка в docker-compose.yml решит эту проблему (пруф):
command: ['--innodb_use_native_aio=0']
Плюс используя volume для БД база работает на порядок медленнее(на глаз раза в 2)

Плюс укажите в статье необходимость ставить «Docker toolbox for Window» вместо «Docker for Windows» ибо последнее не у всех заводится.
Потому что последнее — это под десятку с hyper-v, а первое уже вроде как задепрекейчено

docs.docker.com/toolbox/toolbox_install_windows

Legacy desktop solution. Docker Toolbox is for older Mac and Windows systems that do not meet the requirements of Docker for Mac and Docker for Windows. We recommend updating to the newer applications, if possible.

Это проблемы под тот докер, что Линукс виртуалку под виндой создаёт? Не под тот, который использует LinuxOnWindows подсистему или как там её? Или такой так и не выпустили?

Мухи отдельно, котлеты отдельно: линукс подсистема в Windows и докер не пересекаются и живут сами по себе. Windows 10 имеет свою собственную систему виртуализации hyper-v в которой запускается образ MobiLinuxVM

Помнится году так в 2016-м нам анонсировали, что вот-вот будет нативная поддержка в Windows докера именно через линукс подсистему, пытаясь убедить на переход на Windows Server с Ubuntu как основы гибридного облака. Похоже "вот-вот" ещё не наступило, погуглил сейчас новости — только клиента так можно запустить.

Sign up to leave a comment.

Articles