«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Docker GooseBumps 2019/04/19 23:55:34  №1384524 1
Привет тред, есть вопрос по Docker + Symfony(сифон), в контейнеризации новичок. Вопрос следующий, у меня есть приложение на сифоне которое я хочу засунуть в докер. Прочитав большое кол-во статей, я не донца понял, как это реализовать. На многих бордах люди просто описывают как развернуть среду вокруг сифона(Apache,MySQL и тд), а потом просто загружают свою приложку. Меня интересует вопрос, можно ли создать образ в который будет сразу встроено мое приложение, чтобы я просто мог скачать образ и запустись его с уже готовым приложением. У меня была мысль создать докер файл в котором прописать команды на скачивание с гита моего проекта, но будет ли этот подход грамотный с точки зрения архитектуры и концепции докера?
Ответы: >>1385086 >>1385175
Аноним 2019/04/21 00:34:58  №1385175 2
>>1384524

Докер часто используют для решения проблем с зависимостями. В Линуксе часто нельзя стандартными средствами установить несколько версий языка программирования или какой-то библиотеки, потому Докер используют, чтобы засунуть внутрь контейнера программу и ее зависимости, не влияя на окружающую ОС. То есть, тебе нужен PHP версии X с определенными зависимостями, и ты пишешь Докер-конфиг, который берет базовый образ ОС, скачивает исходники нужной версии PHP, компилирует их (либо устанавливает из репозитория ОС), ставит нужные расширения.

Для примера, вот конфиг из Dockerhub для PHP7.3 на основе минималистичного образа Alpine: https://github.com/docker-library/php/blob/a5c895da277a71578af9561b0e282e6cb0764434/7.3/alpine3.9/cli/Dockerfile

В нем скачивается исходный код PHP, устанавливается компилятор и производится сборка (подозреваю, что не быстро). Описание этого и похожих конфигов есть тут: https://hub.docker.com/_/php

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

В Windows для этого раньше использовались "портабельные" приложения, которые просто ставились в нужную папку со своими зависимостями, не влияя на систему, и наверно в Линуксе можно было бы сделать так же, используя хитрые bash-скрипты, но люди почему-то используют Докер.

После того, как ты сделал конфиги для PHP, MySQL, Nginx, ты используешь docker-compose для того, чтобы запускать контейнеры с ними и связывать между собой. Код приложения внутрь образа не помещается, а просто монтируется туда (в определенную папку). В итоге, разработчику надо лишь запустить Докер, чтобы поднять локальную копию приложения. Это в теории. На практике, тут куча подвохов:

- в Windows/Mac Докер работает в виртуальной машине, и возможно замедление работы в сравнении с нативными приложениями
- прокидывание папки с PHP-кодом в виртуальную машину тоже работает не так быстро
- часто разработчик настраивает конфиг, как ему удобнее, но при этом конфиг не работает у другого разработчика
- образы требуют места на диске, сборка занимает время
- демон Докера большой, сложный, и работает из-под рута

То есть Докер используют в dev-среде, в CI (для прогона тестов), а на продакшене часто админы не разрешают разворачивать Докер.

Теоретически Докер можно использовать и в продакшене, например, ты собираешь образ, выгружаешь его на продакшен. Но тут будут сложности:

- тратится лишнее время на сборку образа
- надо как-то решать задачу бесшовного деплоя. В мануале, например, https://docs.docker.com/compose/production/ дается вариант только деплоя с даунтаймом при переключении.

Что ты хочешь сделать, я не очень понимаю. Зачем тебе делать образ с кодом твоего приложения внутри? Ты его передаешь какому-то заказчику? Если нет, то непонятно, зачем это тебе нужно.

> У меня была мысль создать докер файл в котором прописать команды на скачивание с гита моего проекта, но будет ли этот подход грамотный с точки зрения архитектуры и концепции докера?

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

Я должен сказать, что Докер ни разу не запускал, так что советую получше изучить документацию к нему.
Ответы: >>1385184 >>1385265
Аноним 2019/04/21 08:45:21  №1385265 3
>>1385175
В итоге удалось разобраться и составить свой Docker-compose файл для проекта(на Symfony). Ты оказался прав, это нелогично запихивать исходники в контейнер, гораздо проще таскать среду и подгружать все через гит и композер.

Если кому пригодится, то исходники на гите, стек - phpmyadmin, apache, php7.2, mariaDB.

https://github.com/GooseBumpsOS/docker-symfony
Ответы: >>1385875
Аноним 2019/04/21 12:50:36  №1385875 4
>>1385265

Обычно внутрь контейнера код никто не загружает, его просто примонтируют (то есть код лежит на хосте, а у контейнера есть доступ к этой папке). Папка задается командой VOLUME: https://docs.docker.com/engine/reference/builder/#volume

Если надо, можно почитать информацию на сайте dockerhub, там и по PHP, и по MySQL есть подробнейшие пояснения:

- https://hub.docker.com/_/mysql
- https://hub.docker.com/_/php

Зачем тебе apache, не очень понятно, использовал бы nginx сразу, раз у тебя php-fpm.


Ответы: >>1385920
Аноним 2019/04/21 13:44:24  №1385920 5
>>1385875
>Зачем тебе apache, не очень понятно, использовал бы nginx сразу, раз у тебя php-fpm.

Мой косяк, не заметил, подправил.