Зачем использовать -f в команде сборки docker - PullRequest
2 голосов
/ 20 марта 2019

Я следую этому уроку K8s , и в середине файла есть следующая инструкция:

12. Now let’s build an image, giving it a special name that points to our local cluster registry.

$docker build -t 127.0.0.1:30400/hello-kenzan:latest -f applications/hello-kenzan/Dockerfile applications/hello-kenzan

Я не понимаю, зачем вам указывать наdockerfile, использующий -f applications/hello-kenzan/Dockerfile.

В сборщике сборщика:

-f, --file=PATH/Dockerfile
          Path to the Dockerfile to use. If the path is a relative path and you are
          building from a local directory, then the path must be relative to that
          directory. If you are building from a remote URL pointing to either a
          tarball or a Git repository, then the path must be relative to the root of
          the remote context. In all cases, the file must be within the build context.
          The default is Dockerfile.

Так что -f указывает на файл docker, но мы уже указали путь к файлу docker вкоманда конца сборки - docker build ...applications/hello-kenzan, так зачем вам писать дважды?я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Причина этого в том, что у него, вероятно, было несколько файлов с именем Dockerfile, и использование -f указывает докеру НЕ использовать Dockerfile в текущем каталоге (если он есть), а вместо этого использовать Dockerfile в applications/hello-kenzan.

Хотя в ЭТОМ ОСОБЕННОМ примере это было не нужно, я благодарен создателю учебника за то, что он показал вам возможность использовать PATH и указал -f в определенном месте, чтобы показать вам (человеку, который хочет учиться)что можно использовать файлы Docker, которых нет в PATH (то есть, когда у вас есть несколько файлов Docker, вы хотите создавать свои сборки с помощью или когда файл не называется Dockerfile, например, myapp-dockerfile)

1 голос
/ 20 марта 2019

Вы правы.В этом случае вам не нужно использовать опцию -f.Официальные документы говорят:

-f: имя файла Docker (по умолчанию «PATH / Dockerfile»), а поскольку данный PATH равен applications/hello-kenzan, файл Docker там будет найден неявно.

...