<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docker on Меланхоличный блог</title><link>https://notes.melancholic.tech/tags/docker/</link><description>Recent content in Docker on Меланхоличный блог</description><generator>Hugo</generator><language>ru-RU</language><lastBuildDate>Sat, 21 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://notes.melancholic.tech/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>Ускоряем сборку Docker-образов: слои и кэш - наши друзья</title><link>https://notes.melancholic.tech/posts/%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D1%83-docker-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2-%D1%81%D0%BB%D0%BE%D0%B8-%D0%B8-%D0%BA%D1%8D%D1%88-%D0%BD%D0%B0%D1%88%D0%B8-%D0%B4%D1%80%D1%83%D0%B7%D1%8C%D1%8F/</link><pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/posts/%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D1%83-docker-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2-%D1%81%D0%BB%D0%BE%D0%B8-%D0%B8-%D0%BA%D1%8D%D1%88-%D0%BD%D0%B0%D1%88%D0%B8-%D0%B4%D1%80%D1%83%D0%B7%D1%8C%D1%8F/</guid><description>&lt;p&gt;Когда сборка Dockerfile занимает минуты - это мешает dev-loop&amp;rsquo;у. А ведь можно сильно ускориться с парой простых правил 👇&lt;/p&gt;
&lt;p&gt;🧠 &lt;strong&gt;Основные принципы ускорения:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Максимально используем кэш&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;   Docker кэширует каждый слой. Если слой не изменился - пересобирать не будет.&lt;/p&gt;
&lt;p&gt;   ➤ &lt;strong&gt;Сначала COPY зависимости, потом остальной код:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;   `COPY requirements.txt .&lt;/p&gt;
&lt;p&gt;   `RUN pip install -r requirements.txt  # кэшируется&lt;/p&gt;
&lt;p&gt;   `COPY . .  # некэшируемо при любом изменении в коде
  &lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;Объединяем RUN-команды&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;   Меньше слоёв - быстрее сборка и push:&lt;/p&gt;</description></item><item><title>Как ускорить docker build и сократить размер образа</title><link>https://notes.melancholic.tech/posts/%D0%BA%D0%B0%D0%BA-%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D1%8C-docker-build-%D0%B8-%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C-%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%B0/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/posts/%D0%BA%D0%B0%D0%BA-%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D1%8C-docker-build-%D0%B8-%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C-%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%B0/</guid><description>&lt;p&gt;Иногда docker build тянется вечность, а итоговый образ весит больше, чем база данных 🐘. Разбираемся, как ускорить сборку и оптимизировать размер образа без потери функциональности.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Используй multistage build&lt;br&gt;
Разделяй стадии сборки и финальный образ. Это особенно важно при компиляции (Go, Java, Node.js):&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Стадия 1: билд
&lt;code&gt;FROM golang:1.20 as builder &lt;/code&gt;WORKDIR /app
&lt;code&gt;COPY . . &lt;/code&gt;RUN go build -o app`&lt;/p&gt;
&lt;p&gt;Стадия 2: минимальный runtime
&lt;code&gt;FROM alpine:latest &lt;/code&gt;COPY &amp;ndash;from=builder /app/app /usr/local/bin/app
`ENTRYPOINT [&amp;ldquo;app&amp;rdquo;]&lt;/p&gt;</description></item><item><title>Быстрая сборка Docker</title><link>https://notes.melancholic.tech/posts/%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0-docker/</link><pubDate>Wed, 15 May 2024 00:00:00 +0000</pubDate><guid>https://notes.melancholic.tech/posts/%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0-docker/</guid><description>&lt;p&gt;В CI сборки Docker-образов часто каждый раз стартуют «с нуля», даже если изменения минимальные. В итоге теряются минуты на установку зависимостей и сборку. Локальный кеш не помогает, потому что раннеры эфемерные. Решение — вынос кеша слоёв в registry и повторное использование между сборками.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Экспорт и импорт кеша сборки через registry:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;BuildKit позволяет сохранять кеш прямо в Docker Registry и подтягивать его в следующих билдах. Теперь слои (например, зависимости) будут подтягиваться из registry, даже если билд идёт на новом CI-раннере.&lt;/p&gt;</description></item></channel></rss>