«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 03:10:52  №1385184 3
>>1385175
В одном из тестовых заданий на стажировку была задача предоставить докер образ по окончанию работы, поэтому задался таким вопросом.

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

Спасибо за инфу, буду анализировать.
Ответы: >>1385293 >>1385809
Аноним 2019/04/21 09:23:29  №1385293 4
>>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 5
>>1385293
ахах, сейчас как раз смотрю общую лекцию по Kubernetes.

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


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

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

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

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