Ответ
- Скачивать файлы по URL.
- Автоматически распаковывать локальные `.tar` архивы.
Ответ 18+ 🔞
Давайте разберем эту вашу хрень с копированием файлов в Docker, а то некоторые тут, как обезьяны с гранатой, лезут в Dockerfile без понятия.
Вот смотрите, есть две главные инструкции — COPY и ADD. И если вы не хотите потом охуеть от того, что у вас в образе творится, запомните раз и навсегда: используйте COPY. Это как молоток — простой, понятный, по пальцам себе не прибьёшь.
ADD — это уже такой швейцарский нож с хитрыми лезвиями, которые сами выскакивают. Он тоже файлы копирует, но ещё может из интернета что-то скачать и архивы распаковать. Звучит круто? А нахуй оно надо, если вы этого не просили? Оно возьмёт и начнёт творить какую-то свою магию, а вы потом будете чесать репу, откуда в /app лишние файлы взялись.
Вот вам каноничный пример, как надо:
# Берём нормальный, не раздутый образ
FROM python:3.9-slim
# Говорим, где внутри контейнера будем работать
WORKDIR /app
# КОПИРУЕМ, блядь, а не добавляем! Всё из папки ./src — в /app
COPY ./src /app
# И отдельно requirements.txt тащим
COPY requirements.txt .
# А дальше уже свои команды...
CMD ["python", "main.py"]
Краткая памятка, чтобы не ебать мозг:
COPY— тупо берёт файлы с вашего компа и кладёт их в образ. Всё. Прозрачно, как слёзы ребёнка. Используйте всегда, если не знаете, что делать.ADD— делает то же самое, но если ему дать архив (.tar,.gz), он его распакует, а если дать ссылку — попробует скачать. Это как дать обезьяне банан и отвертку — результат непредсказуем.
Вывод, ёпта, простой: если вам не нужно специально распаковывать архив прямо в Dockerfile — забейте на ADD и используйте COPY. И ваша сборка перестанет быть лотереей, в которой вы каждый раз с замиранием сердца ждёте, что же на этот раз наворотил этот ёбаный ADD.