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

Сначала просто разверни все зависимости твоего приложения в докере
Ответы: >>1385164
Аноним 2019/04/20 23:13:04  №1385164 3
>>1385086
Ок, спасибо за совет. Тогда отпишусь по итогу что получилось, быть может кому пригодится.
Аноним 2019/04/21 00:34:58  №1385175 4
>>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 03:10:52  №1385184 5
>>1385175
В одном из тестовых заданий на стажировку была задача предоставить докер образ по окончанию работы, поэтому задался таким вопросом.

А насчёт prod версии и докера, то на мой взгляд довольно удобно поставлять докер образы, тк у кого то Postgre или sqlLite, а кому то нужен Nginx вместо Apache.

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

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

https://github.com/GooseBumpsOS/docker-symfony
Ответы: >>1385875
Аноним 2019/04/21 09:23:29  №1385293 7
>>1385184
У обычного разработчика в общем случае будут установлены как postgres, так и sqlite.
ОП всё правильно расписал, для zero downtime деплоя в докере из коробки ничего нет, есть bash-костыли на гитхабе. Сервер нужно чистить от старых образов, как-то это всё хозяйство мониторить. В итоге ты будешь вынужден платить за kubernetes или за сервисы амазона. Мы через это прошли и в итоге избавились от докера везде, где возможно - проще один раз за 20-30 минут поднять проект, чем постоянно возиться с докером, ждать сборки образов. Как плюс - на всех проектах PHP самой новой версии, так как если локально обновили PHP c 7.1 на 7.2, то и все проекты нужно перевести на 7.2, иначе локально могут не работать. Ну и на маке докер работает очень медленно, нужны опять костыли вроде docker-sync.
Ответы: >>1385303
Аноним 2019/04/21 09:41:13  №1385303 8
>>1385293
ахах, сейчас как раз смотрю общую лекцию по Kubernetes.

А как без докера решать такие проблемы?


Ответы: >>1385876
Аноним 2019/04/21 12:25:01  №1385809 9
>>1385184

Я думаю, что там требовалось сделать именно Докер для dev-среды. То есть сделать образы с PHP, nginx, MySQL, PHP-FPM и связать их через docker-compose, чтобы все это можно было бы запустить одной командой.
Ответы: >>1388192
Аноним 2019/04/21 12:50:36  №1385875 10
>>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 12:53:10  №1385876 11
>>1385303

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

Если используется пара серверов (веб-сервер + сервер БД), то это все настраивается руками без докеров. Если потребуется переезд, то просто на новом месте разворачивается полный бекап.
Аноним 2019/04/21 13:44:24  №1385920 12
>>1385875
>Зачем тебе apache, не очень понятно, использовал бы nginx сразу, раз у тебя php-fpm.

Мой косяк, не заметил, подправил.
Аноним 2019/04/24 22:52:53  №1388192 13
>>1385809
> сделать образы с PHP, nginx, MySQL, PHP-FPM и связать их через docker-compose, чтобы все это можно было бы запустить одной командой.
Но зачем? В репозиториях докера уже всё это есть.
А ещё есть уже даже собранное решение. Devilbox
Ответы: >>1388990
Аноним 2019/04/26 07:59:25  №1388990 14
>>1388192
Чтобы разобраться как это работает