
Dmitriy
21.10.2018
07:45:43
Парни, а кто как добавляет композеровские пакеты в образ докера? Есть несколько вариантов
1. Добавлять композер в образ, а устанавливать зависимости при деплое
\ + Маленький размер образа
\ - Версия композера может протухнуть на момент деплоя, версии же пакетов фиксированы
\ - Необходимо после разворачивания контейнера предпринимать какие-то доп. действия
2. Добавлять пакеты непосредственно в образ
\ + Разворачиваешь контейнер, и он уже полностью готов к работе
\ + Не нужно таскать композер (который может обновиться)
\ - Размер образа раздувается значительно (+ ~100Mb на каждую версию образа в реджистри)

Александр
21.10.2018
07:50:53
я в образ зашиваю

Andrey
21.10.2018
07:51:41
Билд стейдж

Dmitriy
21.10.2018
07:52:47

Google

Andrey
21.10.2018
07:53:19

Dmitriy
21.10.2018
07:53:51
так это билд, а я говорю про итоговый образ

Andrey
21.10.2018
07:55:52
Короче, чёрт знает сколько раз разбирали. Мы вендор в образ ложим

Dmitriy
21.10.2018
07:57:23
ну вот, 2 человека именно так и делают) это я и хотел узнать. Спасибо

Andriy
21.10.2018
09:02:47

Sergey
21.10.2018
09:51:55
примерно так

Petr
21.10.2018
11:17:39


Sergey
21.10.2018
11:26:47
p.s. я по итогу прихожу к тому что для node например всеравно отказываюсь от сборки внутри Dockerfile и собираю своим башем. Что-то типа...
docker build
npm build
// подготовка продакшен билда
docker create
docker cp
docker commit
для php необходимости в этом особо нету, а вот для ноды сборка чисто докерфайлом в моем случае дико ограничивает (с учетом того насколько херово продумана система кэширования для мульстэйдж билдов в условиях CI)

Andrew
21.10.2018
12:00:27
@fes0r спасибо, а почему не использовать простой assertArraySubset от phpUnit для проверки? Выходит вроде тоже самое вдеь.
$this->assertArraySubset(
[
[
'name' => 'John',
],
],
$aliceFiendsArray,
);

Google

Sergey
21.10.2018
12:01:49
Dockerfile != Makefile

Petr
21.10.2018
12:03:19
чо эта?
Чтобы не ломать голову над тем, что я должен сделать перед тем, как буду запускать сборку образа

Sergey
21.10.2018
12:03:39
Dockerfile это как запаковка бинарника в архив
make build docker к примеру, чтобы не ломать голову

Dmitriy
21.10.2018
13:58:40
Вообще, если так подумать, к примеру релиз каждые 2 недели. Докер-образ по ~200Мб улетает на реджистри - то это очень весомо, не критично но весомо
А у нас дык вообще релиз тогда, когда готов, и даже роадмапов пока особо нет, бывает такое, что одно поле в сущность добавить да в интерфейс, лепить по этому поводу целый еще один образ - жесть. Но это так, мысли вслух, не больше

Ivan
21.10.2018
14:06:48
Хм. У нас релиз каждый день, иногда два раза в день. Не парит таскать по 300 метров собранного докер образа - код, зависимости и ещё картинки, документы и прочая хрень, которая в репе живёт. По факту готовый к релизу образ собираться на каждый коммит. Вендоры из кэша приходят за пару секунд.

Dmitriy
21.10.2018
14:09:27
и сколько релизов хранится в реджистри? все когда-либо собраные?

Sergey
21.10.2018
14:10:33
там же слоями хранится в регистри все

Dmitriy
21.10.2018
14:10:58
а блин, сорян, тупанул)) забыл про слоистость aufs

Ivan
21.10.2018
14:11:14
вендоры тоже инжектятся в образ?
Все инжектиться, образ готовый запуститься в любом месте. В регистри периодически подчищаем. Больше 2х недель не храниться. Слой один получается.

Sergey
21.10.2018
14:11:25
у нас на новые релизы всего пару мб выкачивает образов

Ivan
21.10.2018
14:11:26
Можно по слоям, но сложно..

Sergey
21.10.2018
14:11:30
все остальное с прошлых слоев берет

Dmitriy
21.10.2018
14:12:43
Можно по слоям, но сложно..
разве? это ж дефолтное поведение реджистри, наоборот приходится перед каждым билдом сбрасывать кэш докера, чтобы одним слоем собирался (или сколько их там у вас в dockerfile)

Sergey
21.10.2018
14:13:20

Ivan
21.10.2018
14:13:46
У на фактически один слой - код. Берём контейнер с пыхом, кладём в него код со всеми зависимостями.

Google

Sergey
21.10.2018
14:14:07

Sergey
21.10.2018
14:14:45

Sergey
21.10.2018
14:14:45
COPY web/app.php web/app.php
COPY composer.json composer.json
COPY composer.lock composer.lock
COPY bin bin/
COPY vendor vendor/
COPY config config/
COPY templates templates/
COPY src src/
у нас примерно в таком порядке идет

Ivan
21.10.2018
14:14:57
ну эт вы зря)
Да можно оптимизировать, но пока это не проблема, в других местах проблем больше, а ресурсы ограничены...

Sergey
21.10.2018
14:15:32
заморачиваться с порядком еще
хотя... не вендоры всеравно буду копировать что бы кэш реюзался

Sergey
21.10.2018
14:16:18
с тобой спорить опять не буду)
у тебя странные понятия о контейнерах)
?

Sergey
21.10.2018
14:16:54
может быть у тебя странные поняттия о контейнерах? ;)

Sergey
21.10.2018
14:17:09
у нас были проблемы с образами и мы умудрялись ложить диски на амазоне при деплоях

Sergey
21.10.2018
14:17:13
p.s. твое "странное" оттношение обусловлено тем что у тебя мак)

Sergey
21.10.2018
14:17:39
когда за деплой тебе нужно поднять пару сотен подов(контейнеров)

Sergey
21.10.2018
14:17:53
а, ну... тогда понятно

Sergey
21.10.2018
14:18:02
то каждый раз тащить туда новый слой вендоров, который не менялся
это больно

Sergey
21.10.2018
14:18:27
у меня вендоры всегда будут отдельным слоем. Так что да, я скорее всего буду ближе к твоему варианту юзать

Google

Sergey
21.10.2018
14:18:46
и это единственное что мне мешает комфортно себя с мультистэйдж билдами чувствовать. Как по мне мультистэйдж отлично когда у тебя проект компилится.
хотя... можно и с мультистэйдж слой отдельный держать...
просто я не представляю пока как

Sergey
21.10.2018
14:19:31
ни на гошных, ни на котлин проектах нигде мультистейдж не юзается
бинари отдельно собираются

Sergey
21.10.2018
14:20:02

Sergey
21.10.2018
14:21:01
FROM openjdk:8-jre-slim
VOLUME /tmp
COPY ./build/libs/app.jar app.jar
ENV JAVA_OPTS=""
ENV ARGS=""
CMD java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar $ARGS
тип такого
с пхп +- так же

Ivan
21.10.2018
14:21:42
У нас фронты мультистейдж сейчас собираются делать. Сейчас мультистейдж через баш)

Sergey
21.10.2018
14:21:50
только делается еще RUN php bin/console cache:warmup

Sergey
21.10.2018
14:22:47
или пофиксили уже в композере? А то я уже давно не смотрел
ну разве что у тебя там SSR есть и ноду под это дело надо держать

Sergey
21.10.2018
14:23:45
у меня в контейнере симфони можно сказать в рид онли лежит, туда юзер ниче даже записать не сможет

Sergey
21.10.2018
14:24:54
хз, все ок работает
гляну. я просто для фронта перевожу сборку на пайплайны + вшивать уже билд в образ. Так если с composer-ом не будет пробем в плане копирование вендоров если ничего не ставилось нового будет приводить к одинаковому слою и будет юзаться кэш - то можно будет юзануть и тогда у нас с тобой будет одинаково
для сборки ж
я запутался. Но ты ж для сборочки докер не юзаешь, нет?

Sergey
21.10.2018
14:25:21
локально не

Google

Sergey
21.10.2018
14:25:26
а на CI?

Sergey
21.10.2018
14:25:38
там через образы с фикс версиями

Sergey
21.10.2018
14:25:43
или у тебя воркеры на докерах и ты докер образ внутри докера собираешь?

Sergey
21.10.2018
14:26:08
мм, не. просто node/npm идут образами

Sergey
21.10.2018
14:26:13

Sergey
21.10.2018
14:26:15
вместо локальных бинарей

Sergey
21.10.2018
14:26:21
а, понял
тогда все ок
тогда я понимаю что происходит
ну вот я так же буду делать)))
я проиграл короч

Sergey
21.10.2018
14:26:59
есть куча волокиты, которая делается образами композеров, npm и прочей херни, собирают конечный набор файликов
а потом это все раскладывается по образам
чето в фронт образ, чето в пхп
помимо этого еще всякие линты и тесты гоняются, это тоже контейнеры

Sergey
21.10.2018
14:27:51
ну вот у меня сча есть общий код который как общий модуль между несколькими проектами и за счет этого мы сильно сборку переделываем. Так проще и мороки меньше чем с приватными регистри

Sergey
21.10.2018
14:27:58
короче все для того чтобы на CI кроме докера ниче не надо было держать и сборка повторялась локально

Sergey
21.10.2018
14:28:20
да, понимаю. Аналогично делаю.
А ты на дженкинсе или на чем-нибудь модном?

Sergey
21.10.2018
14:28:35
дженкинс не модный?)
ну можно тимсити взять, с kotlin dsl