[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-docker-v-chyom-raznitsa-mezhdu-copy-i-add":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},1080,"v-chyom-raznitsa-mezhdu-copy-i-add",17,"docker","Docker","🐳","В чём разница между COPY и ADD?","COPY и ADD — это инструкции Dockerfile для копирования файлов в образ, но ADD обладает дополнительными возможностями, которые в большинстве случаев не нужны.\n\n### COPY — простое копирование\n\n```dockerfile\nCOPY target\u002Fapp.jar \u002Fapp\u002Fapp.jar\nCOPY config\u002F \u002Fapp\u002Fconfig\u002F\n```\n\n### ADD — расширенное копирование\n\n```dockerfile\n# Автоматически распаковывает tar-архив\nADD archive.tar.gz \u002Fapp\u002F\n\n# Может загружать файл по URL (не рекомендуется)\nADD https:\u002F\u002Fexample.com\u002Ffile.txt \u002Fapp\u002F\n```\n\n### Рекомендация\n\nВсегда используйте COPY, если вам не нужна автоматическая распаковка архивов. Это делает Dockerfile более прозрачным и предсказуемым. ADD с URL считается анти-паттерном — лучше использовать `RUN curl` или `RUN wget`, чтобы можно было контролировать процесс и удалить загруженный файл в том же слое:\n\n```dockerfile\n# Плохо\nADD https:\u002F\u002Fexample.com\u002Ftool.tar.gz \u002Fopt\u002F\n\n# Хорошо\nRUN curl -fsSL https:\u002F\u002Fexample.com\u002Ftool.tar.gz | tar -xz -C \u002Fopt\u002F\n```\n\n> **На собеседовании:** короткий ответ: используйте COPY всегда, кроме случаев, когда нужна автоматическая распаковка tar-архива. ADD с URL — анти-паттерн. Этот вопрос проверяет, знаете ли вы best practices написания Dockerfile.","","middle",[15,16,17,7],"entrypoint","dockerfile","cmd",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":33,"featuredSnippetReady":34},"Разница между CMD и ENTRYPOINT в Docker — Gymterview","CMD vs ENTRYPOINT в Dockerfile: CMD переопределяется целиком, к ENTRYPOINT аргументы добавляются. Комбинация, exec-форма, проблема PID 1 и shell-форма.","CMD vs ENTRYPOINT в Docker: ключевые различия — Gymterview","Разница CMD и ENTRYPOINT: переопределение, комбинация, exec vs shell форма, проблема PID 1 при shell-форме.",[26,27,28,29,30,31,8,32],"CMD vs ENTRYPOINT","Dockerfile CMD","Dockerfile ENTRYPOINT","exec-форма","shell-форма","PID 1","собеседование","CMD задаёт команду по умолчанию, которая полностью заменяется аргументами docker run. ENTRYPOINT задаёт основную команду, а аргументы docker run добавляются к ней. Идиоматический подход — комбинация: ENTRYPOINT задаёт исполняемый файл, CMD — аргументы по умолчанию. Рекомендуется exec-форма (JSON-массив), так как shell-форма оборачивает команду в \u002Fbin\u002Fsh -c и SIGTERM не доходит до Java-процесса (проблема PID 1).",true]