@symfony_php

Страница 1400 из 1418
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
А как именно влияет билд стейдж?
Он и сделает твой composer install

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
11:26:47
Как по мне, Dockerfile должен мочь собрать любой проект лишь на основе исходников, поэтому везде в докерфайле делаю composer install
для сложных случаев всегда можно воспользоваться мультистэйдж билдами, если хочется например в продакшен образе только продакшен зависимости

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
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
https://github.com/fesor/project-skeleton/blob/master/docker/php/Dockerfile#L31-L34
Т.е. у тебя во время билда полностью качается кеш с нуля, а потом чистится?

Вообще, если так подумать, к примеру релиз каждые 2 недели. Докер-образ по ~200Мб улетает на реджистри - то это очень весомо, не критично но весомо

А у нас дык вообще релиз тогда, когда готов, и даже роадмапов пока особо нет, бывает такое, что одно поле в сущность добавить да в интерфейс, лепить по этому поводу целый еще один образ - жесть. Но это так, мысли вслух, не больше

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

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
@fes0r спасибо, а почему не использовать простой assertArraySubset от phpUnit для проверки? Выходит вроде тоже самое вдеь. $this->assertArraySubset( [ [ 'name' => 'John', ], ], $aliceFiendsArray, );
почитай ридми. Там три пункта всего. Если совсем лень - таймстэмпы, айдишки, вложенности, реюз матчеров. Да можно своих ассертов нафигачить - это не сложно. Но как-то хз. Опять же - я свою задумку до конца так и не реализовал)

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

Google
Sergey
21.10.2018
14:14:45
Вообще, если так подумать, к примеру релиз каждые 2 недели. Докер-образ по ~200Мб улетает на реджистри - то это очень весомо, не критично но весомо
1. Релиз != деплой. У меня деплой на прод каждый день - обычная практика. В день билдится где-то 20-30 образов 2. За эти 2 недели как часто у тебя меняется composer.json/composer.lock? у меня - где-то 1-2 раза за спринт, не чаще. А потому размер образов в среднем пару мегабайт то что пушится сверху. А те 200 метров - пару раз за спринт. не чаще.

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
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 тип такого
так а как ты хэндлишь штуки типа composer install? оно ж автолоад всегда будет перегенеривать, или ты с --no-autoload делаешь вендоры а уже потом автолоад генеришь?

или пофиксили уже в композере? А то я уже давно не смотрел

ну разве что у тебя там 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
там через образы с фикс версиями
еще раз - composer install или npm ci ты где делаешь? на хосте или в контейнере (пусть и при сборке)

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

Страница 1400 из 1418