Какова цель контекста сборки 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 вы можете контролировать, где поставить каждый. Случай, о котором вы упоминали, является всего лишь тривиальным примером, когда у вас есть только каталог и только цель.