Как установить имя изображения в Dockerfile?

299

Вы можете установить имя изображения при создании пользовательского изображения, например так:

docker build -t dude/man:v2 . # Will be named dude/man:v2

Есть ли способ определить имя изображения в Dockerfile, поэтому мне не нужно упоминать его в docker buildкоманде?

gvlasov
источник
1
Для всех, кто интересуется, используя FROM ... КАК имя не работает
Руфус

Ответы:

267

Пометка изображения не поддерживается в Dockerfile. Это должно быть сделано в вашей команде сборки. В качестве обходного пути вы можете выполнить сборку с помощью docker-compose.yml, который идентифицирует имя целевого образа, а затем запустить docker-compose build. Пример docker-compose.yml будет выглядеть

version: '2'

services:
  man:
    build: .
    image: dude/man:v2

Тем не менее, есть противодействие выполнению сборки с compose, так как это не работает с режимами роя. Итак, вы вернулись к выполнению команды, как вы задали в своем вопросе:

docker build -t dude/man:v2 .

Лично я, как правило, собираю небольшой скрипт в своей папке (build.sh), который передает любые аргументы и включает в себя имя изображения, чтобы сохранить типизацию. А для производства сборка обрабатывается сервером ci / cd с именем образа внутри конвейерного скрипта.

BMitch
источник
303

Как создать изображение с произвольным именем без использования файла yml:

docker build -t image_name .

Как запустить контейнер с произвольным именем:

docker run -d --name container_name image_name
salehinejad
источник
78
Я не буду комментировать дальше, но вопрос был «Как установить имя изображения в Dockerfile?» Не "Как установить имя образа докера?" Этот ответ был в самом вопросе.
Новатерата
68
Я возвращался к этому пару раз, и этот ответ помог, несмотря на то, что он был технически не по теме
gdbj
7
Если вы согласны, если помещаете Dockerfileв каталог с тем же именем, которое вы хотите для своего образа, вы можете использовать в docker build -t $(basename $PWD) .качестве команды сборки. Затем вы можете использовать поиск CTRL-R из «build», чтобы найти и повторно использовать команду, и вам никогда не придется ее редактировать. Вы также можете сделать его псевдонимом, если хотите.
Бруно Броноски
В любом случае спасибо за этот ответ. Я потратил несколько часов, чтобы получить это через Интернет. Я не мог получить правильный ответ, тот, кто дает имя своему изображению, не может идти дальше без этого, если ему также нужно имя для его контейнера.
Susaj S Nair
38

Вот другая версия, если вам нужно сослаться на определенный файл докера:

version: "3"
services:
  nginx:
    container_name: nginx
    build:
      context: ../..
      dockerfile: ./docker/nginx/Dockerfile
    image: my_nginx:latest

Тогда ты просто бежишь

docker-compose build
Дэвид Дехган
источник
1
Мне нравится, что этот ответ показывает разницу между контейнерным именем и тегом имени изображения: Если бы только было немного больше объяснения того, что происходит: «container_name» присваивает имя контейнеру, который в итоге возник из изображения. «image» присваивает имена и теги создаваемому изображению, из которого построен контейнер. Как уже упоминали другие, нельзя указать имя образа из Dockerfile, как просил OP, поэтому вместо этого мы используем файл docker-compose.yml и запускаем его с помощью «docker-compose up -d --build»
Шон МакКарти
-7

Вы можете сделать это используя 'AS' FROM Ubuntu: 16.04 AS FooImage

Ричард
источник
6
ASСинтаксис определяет имя целевого используемое в многоступенчатом строить, и это имя также может быть использовано вместо изображения дляCOPY --from синтаксиса в этой многоступенчатой сборке. Однако он не указывает результирующее имя / тег для самой сборки.
BMitch