Pull to refresh

Comments 13

Спасибо.
И вот что что, а по terragrunt'y было бы интересно почитать детальнее — может быть даже отдельную статью ( как/куда/зачем/структура и тд). Сколько раз смотрел их документацию все напоминает историю про урок рисования в школе — типа рисуем кружочек и еще один, а потом рисуем сову. Нигде толкового описания как и что не нашел.
Возможно и сподоблюсь что-то написать.
Мне лично их документация тоже не нравится, как-то лично на мой вкус сложно всё ищется, если искать не натравливая гугл на неё и stackoverflow, а прямо в ней.

Уух, сколько слоев то, в продакшене за такое по рукам бьют ))) Вместо RUN wget… можно использовать ADD ...

Я потому и написал «За код не ругайте, написал за несколько часов и решил поделиться.»

Тут очень много что можно исправить, а цель статьи в том, чтобы показать, что можно сесть и автоматизировать что-то за пару часов. Потом, естественно, рефакторить.

Но кстати,
docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy

Because image size matters, using ADD to fetch packages from remote URLs is strongly discouraged; you should use curl or wget instead. That way you can delete the files you no longer need after they’ve been extracted and you don’t have to add another layer in your image. For example, you should avoid doing things like:
ADD https://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all

And instead, do something like:

RUN mkdir -p /usr/src/things \
&& curl -SL https://example.com/big.tar.xz \
| tar -xJC /usr/src/things \
&& make -C /usr/src/things all

For other items (files, directories) that do not require ADD’s tar auto-extraction capability, you should always use COPY

Let the holy war begin :)
Но кстати,
docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy
ADD же может сразу распаковывать, tar.gz/zip так точно. Единственное — ADD не поддерживает аутентификацию, но это не ваш случай

python3-dev \

build-essential \
что это делает в рабочем образе? Прочитайте что такое multistage builds
Ещё раз перечитайте первую строку моего предыдущего комментария и не набрасывайте, смысл статьи не показать все best practices, а с близкой к максимальной скорости реализовать автоматизацию.

И всё же ссылка по использованию ADD, которую я привёл даже в названии имеет dockerfile best practices, вы можете делать как угодно. Лично мне больше нравится именно curl или wget'ом делать такое, пускай это ещё + утилита. А так конечно нужно билдить отдельно, потом перекладывать в from scratch и т.п.

Я чуть было не положил в cloud-init такое:
apt update
apt install -y cargo
cargo install prometheus_wireguard_exporter

Потом подумал, что народ попытаясь это развернуть заждётся пока Rust это соберёт и всё-таки выложил бинарник. Точнее я раскатал это на t2.medium, заждался, сбилдил у себя на i9 и выложил бинарь :)

Поэтому и написал про холивар :)
Ещё раз перечитайте первую строку моего предыдущего комментария и не набрасывайте, смысл статьи не показать все best practices, а с близкой к максимальной скорости реализовать автоматизацию.
статья для новичков, а у вас такие ляпы, но дело ваше
Когда даёте советы убедитесь, что они сами соответствуют best practices :)

Чтобы покопаться в слоях, мало ли не знаете и вам интересно, есть прикольная штука (таких много есть, но эта нравится): github.com/wagoodman/dive

Так-то у Terraform / Terragrunt и свои уже собранные контейнеры есть и собирать свой в целом смысла почти нет.

По-поводу python3-dev и build-essential принимаю, но лень мне было из-за несчастного aws cli делать multistage, к тому же у меня работает несколько другой контейнер. Плюс вам поставить пока не могу из-за недостатка кармы.
Чтобы покопаться в слоях, мало ли не знаете и вам интересно, есть прикольная штука (таких много есть, но эта нравится): github.com/wagoodman/dive
да много чего есть, у нас в CI встроен анализатор docker образов

ADD example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all
And instead, do something like:
оказывается они редиски убрали эту фичу у ADD в 17.06, а было очень удобно
Эту штуку, которая https://github.com/wagoodman/dive как раз тоже встраивают в ci и можно заваливать сборку, если определённые параметры вроде lowestEfficiency, highestWastedBytes или highestUserWastedPercent ниже, чем вам нужно и можно их естественно задавать https://github.com/wagoodman/dive#ci-integration

А что используется у вас?
RUN set -x && \
ln -sf /usr/bin/python3 /usr/bin/python && ln -sf /usr/bin/pip3 /usr/bin/pip
кстати очень плохая практика, так и сломать что то можно в системе. Я бы не советовал так делать. Как минимум в ansible нахлебался вдоволь

На самом питон тут вообще не нужен, т.к. aws cli ставит свой, а несколько остальных утилит просто не используются.
Но в рамках уже написанного можно использовать установленное совершенно без проблем.
Вообще люблю я эти shyaml, jq, yq, envsubst и т.д. Места много не занимают, а автоматизации вполне хорошо помогают, удобно иметь их в случае чего.

Sign up to leave a comment.

Articles