Какова цель контекста сборки Docker?
Какова цель контекста сборки Docker? Я понимаю, из документации, что это "точка входа", из которой будет отправлено все содержимое демона докеров. Но какая точка отправки всего содержимого текущего каталога, предполагая пример использования по умолчанию, приведенный в примерах, когда мы также должны явно включать директиву COPY или ADD в файл Docker, чтобы ACTUALLY включать содержимое текущего каталога в сгенерированное изображение? Если контекст отправляется демону, который должен быть включен в изображение, то почему мы должны сделать этот дополнительный шаг. Почему задача сжатия/отправки/копирования не включает содержимое указанного каталога по умолчанию?
например, учитывая эту структуру каталогов
-rw-r--r-- 1 me me 7 Jun 8 18:52 .dockerignore
-rw-r--r-- 1 me me 1.1K Jun 9 12:42 Dockerfile
drwxr-xr-x 13 me me 4.0K Jun 8 19:43 myproject
Когда я запускаю эту команду docker build -t user/myproject: 2.3.
Тогда я ожидаю увидеть каталог myproject где-нибудь в сгенерированном изображении. Но я ДОЛЖЕН включать
ADD myproject /
для этого.
Если процесс сборки сжимает текущее содержимое каталога и отправляет его демону, куда он идет? Почему он не делает этот контент доступным для использования на изображении?
Ответы
Ответ 1
TL; DR: "потому что клиент и демон могут даже не работать на одном компьютере"
Команда docker
является докере-клиентом докер- dockerd
который является службой, которая может запускаться непосредственно на вашем ПК (Linux) или под виртуальной машиной Linux под OSX или Windows.
В: Какова цель контекста построения Docker?
Отсюда:
Было бы неплохо также упомянуть, что это должно произойти именно так, потому что клиент и демон могут даже не работать на одной машине, поэтому без этого "контекста" на машине-демоне не было бы другого способа получить файлы для ADD или иначе
В: Если процесс сборки сжимает текущее содержимое каталога и отправляет его демону, куда он идет?
Демон docker получает сжатый каталог и обрабатывает его на лету; не имеет значения, где он хранится в этот момент.
В: Почему он не делает этот контент доступным для использования в изображении?
Подумайте об этом: как docker знает, где вы хотите поместить каждый файл/каталог в целевой образ? С помощью директив COPY/ADD
вы можете контролировать, где поставить каждый. Случай, о котором вы упоминали, является всего лишь тривиальным примером, когда у вас есть только каталог и только цель.