ADD из URL в Dockerfile — почему так делать не стоит
ADD из URL в Dockerfile — почему так делать не стоит Когда я только начинал писать Dockerfile, мне казалось, что использовать ADD для загрузки скриптов по URL — это стильно. ADD https://path.com/uv-installer.sh — чем не аналог COPY? Но на практике такое решение приносит больше проблем, чем пользы. • Скачивание во время сборки — риск: сеть подвела — билд упал. К тому же это замедляет процесс. • Скрипт на удалённом сервере может измениться. Docker не проверяет его хеш, и при пересборке вы рискуете получить другую версию. • Кэширование таких слоёв работает непредсказуемо. Где ADD действительно хорош? Для архивов. Он автоматически распаковывает их. ADD./archive.tar.gz /app Содержимое окажется в /app уже распакованным. Если хотите явно контролировать процесс, используйте COPY и команду распаковки: COPY./archive.tar.gz /app RUN tar -xzf /app/archive.tar.gz -C /app && rm /app/archive.tar.gz А для копирования утилит вроде uv лучше всего подходит COPY --link с указанием образа-источника: COPY --link --from=ghcr.io/astral-sh/uv:{VERSION} /uv /usr/local/bin/uv Флаг --link позволяет переиспользовать этот слой, даже если вышестоящие слои инвалидировались. Быстро и надёжно. Правило простое: ADD — для архивов, COPY — для всего остального. Не усложняйте.