Come impostare il nome dell'immagine in Dockerfile?


299

È possibile impostare il nome dell'immagine durante la creazione di un'immagine personalizzata, in questo modo:

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

C'è un modo per definire il nome dell'immagine in Dockerfile, quindi non devo menzionarlo nel docker buildcomando?


1
Per chiunque sia curioso, usando FROM ... AS il nome NON funziona
Rufus

Risposte:


267

La codifica dell'immagine non è supportata all'interno del Dockerfile. Questo deve essere fatto nel tuo comando build. Per ovviare a questo problema, puoi eseguire la compilazione con un docker-compose.yml che identifica il nome dell'immagine di destinazione e quindi esegui un docker-compose build. Un esempio docker-compose.yml sarebbe simile

version: '2'

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

Detto questo, c'è una spinta a fare la compilazione con compose poiché non funziona con le distribuzioni in modalità sciame. Quindi sei tornato a eseguire il comando come hai dato nella tua domanda:

docker build -t dude/man:v2 .

Personalmente, tendo a compilare con un piccolo script shell nella mia cartella (build.sh) che passa qualsiasi argomento e include il nome dell'immagine lì per salvare la digitazione. E per la produzione, la build è gestita da un server ci / cd che ha il nome dell'immagine all'interno dello script della pipeline.


303

Come creare un'immagine con un nome personalizzato senza utilizzare il file yml:

docker build -t image_name .

Come eseguire un contenitore con nome personalizzato:

docker run -d --name container_name image_name

78
Non ho intenzione di commentare ulteriormente, ma la domanda era "Come impostare il nome dell'immagine in Dockerfile?" Non "Come impostare il nome dell'immagine della finestra mobile?" Quella risposta era nella domanda stessa.
Novaterata,

68
Ci sono tornato un paio di volte e questa risposta mi ha aiutato, nonostante sia tecnicamente fuori tema
gdbj,

7
Se sei coerente se inserisci Dockerfilein una directory lo stesso nome che vuoi per la tua immagine, puoi usare docker build -t $(basename $PWD) .come comando di compilazione. Quindi è possibile utilizzare la ricerca CTRL-R da "build" per trovare e riutilizzare il comando e non è necessario modificarlo. Puoi anche renderlo un alias se vuoi.
Bruno Bronosky,

Grazie comunque per questa risposta. stavo spendendo poche ore per farlo su internet. Non ho potuto ottenere una risposta adeguata, uno che dà il nome alla sua immagine non può andare oltre senza questo se ha bisogno di un nome anche nel suo contenitore.
Susaj S Nair,

38

Ecco un'altra versione se devi fare riferimento a un file docker specifico:

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

Quindi corri e basta

docker-compose build

1
Mi piace che questa risposta mostri la differenza tra nome_contenitore e nome dell'immagine: tag. Se solo ci fosse una spiegazione in più di quello che sta succedendo: "nome_contenitore" nomina il contenitore che alla fine è stato rimosso dall'immagine. "immagine" nomina e tagga l'immagine creata, da cui viene creato il contenitore. Come altri hanno già detto, non è possibile specificare il nome dell'immagine dal Dockerfile, come richiesto dall'OP, quindi utilizziamo invece il file docker-compose.yml ed eseguiamo con "docker-compose up -d --build"
Sean McCarthy

-7

Puoi farlo usando 'AS' DA ubuntu: 16.04 AS FooImage


6
La ASsintassi specifica il nome di destinazione utilizzato in una build multi-stage e questo nome può anche essere usato al posto di un'immagine per la COPY --fromsintassi all'interno di quella build multi-stage. Tuttavia, non specifica il nome / tag risultante per la build stessa.
BMitch
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.