Як встановити ім'я зображення в Dockerfile?


299

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

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

Чи є спосіб визначити ім'я зображення в Dockerfile, тому мені не доведеться згадувати його в docker buildкоманді?


1
Для тих, хто цікавиться, використовуючи ВІД ... ЯК ім'я НЕ працює
Руфус

Відповіді:


265

Позначення зображення не підтримується в Dockerfile. Це потрібно зробити в команді збірки. Як вирішення, ви можете зробити збірку за допомогою docker-compose.yml, який ідентифікує цільове ім'я зображення, а потім запустити a docker-compose build. Зразок docker-compose.yml виглядав би так

version: '2'

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

Але це означає, що існує поштовх проти створення компіляції з композицією, оскільки це не працює з розгортанням режиму рій. Отже, ви повернетесь до запуску команди, як ви вказали у своєму запитанні:

docker build -t dude/man:v2 .

Особисто я схильний будувати за допомогою невеликого скрипта оболонки у своїй папці (build.sh), який передає будь-які аргументи та містить ім'я зображення там, щоб зберегти набравши текст. А для виробництва, збіркою обробляється сервер ci / cd, який має сценарій зображення всередині сценарію конвеєра.


302

Як створити зображення з власною назвою без використання файлу yml:

docker build -t image_name .

Як запустити контейнер із власною назвою:

docker run -d --name container_name image_name

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
Мені подобається, що ця відповідь показує різницю між іменем контейнера та назвою зображення: тег. Якби там було трохи більше пояснень того, що відбувається: "ім'я_контролера" називає контейнер, який в кінцевому рахунку вивернувся з зображення. "image" називає та позначає створене зображення, з якого будується контейнер. Як уже згадували інші, не можна вказати ім'я зображення з Dockerfile, як запитував ОП, тому ми використовуємо замість нього файл docker-compose.yml і запускаємо його "docker-compose up -d --build"
Шон Маккарті

-7

Ви можете зробити це, використовуючи "AS" З ubuntu: 16.04 AS FooImage


6
ASСинтаксис визначає ім'я цільового використовується в многоступенчатом побудувати, і це ім'я також може бути використано замість зображення для COPY --fromсинтаксису в цій багатоступінчастої збірці. Однак він не вказує отримане ім'я / тег для самої збірки.
BMitch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.