Como definir o nome da imagem no Dockerfile?


299

Você pode definir o nome da imagem ao criar uma imagem personalizada, assim:

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

Existe uma maneira de definir o nome da imagem no Dockerfile, para que eu não precise mencioná-lo no docker buildcomando?


1
Para qualquer um curioso, usando FROM ... AS nome não funciona
— Rufus

Respostas:


267

A marcação da imagem não é suportada dentro do Dockerfile. Isso precisa ser feito no seu comando de construção. Como solução alternativa, você pode fazer a construção com um docker-compose.yml que identifique o nome da imagem de destino e, em seguida, execute a docker-compose build. Uma amostra docker-compose.yml seria semelhante a

version: '2'

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

Dito isto, há um esforço contra fazer a compilação com composição, pois isso não funciona com implantações no modo enxame. Então, você voltou a executar o comando conforme indicado em sua pergunta:

docker build -t dude/man:v2 .

Pessoalmente, costumo construir com um pequeno script de shell na minha pasta (build.sh) que passa qualquer argumento e inclui o nome da imagem para salvar a digitação. E para produção, a compilação é manipulada por um servidor ci / cd que possui o nome da imagem dentro do script de pipeline.


303

Como criar uma imagem com nome personalizado sem usar o arquivo yml:

docker build -t image_name .

Como executar um contêiner com nome personalizado:

docker run -d --name container_name image_name

78
Não vou comentar mais, mas a pergunta era "Como definir o nome da imagem no Dockerfile?" Não é "Como definir o nome da imagem do docker?" Essa resposta estava na própria pergunta.
— Novaterata 07/07

68
Tenho de voltar a este um par de vezes, e esta resposta tem ajudado, apesar de ser tecnicamente off-topic
— gdbj

7
Se você for consistente ao colocar o Dockerfilediretório em um diretório com o mesmo nome que deseja para sua imagem, poderá usar docker build -t $(basename $PWD) .como seu comando de construção. Em seguida, você pode usar a pesquisa CTRL-R em "build" para localizar e reutilizar o comando e nunca precisar editá-lo. Você também pode criar um alias, se quiser.
— de Bruno Bronosky

De qualquer forma, obrigado por esta resposta. eu estava gastando algumas horas para conseguir isso pela internet. Eu não consegui uma resposta adequada, alguém que dê nome à sua imagem não pode ir mais longe sem isso, se precisar de nome para o seu recipiente também.
— Susaj S Nair 02/04

38

Aqui está outra versão se você precisar fazer referência a um arquivo docker específico:

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

Então você apenas corre

docker-compose build

1
Eu gosto que esta resposta mostre a diferença entre o container_name e o nome da imagem: tag. Se houvesse um pouco mais de explicação sobre o que está acontecendo: "container_name" nomeia o contêiner que acabou gerando a partir da imagem. "image" nomeia e marca a imagem criada, a partir da qual o contêiner é construído. Como outros já mencionaram, não é possível especificar o nome da imagem no Dockerfile, como o OP pediu, então usamos o arquivo docker-compose.yml e o executamos com "docker-compose up -d --build"
— Sean McCarthy

-7

Você pode fazer isso usando 'AS' FROM ubuntu: 16.04 AS FooImage


6
A ASsintaxe especifica o nome do destino usado em uma construção de vários estágios, e esse nome também pode ser usado no lugar de uma imagem para a COPY --fromsintaxe nessa construção de vários estágios. No entanto, ele não especifica o nome / tag resultante para a compilação em si.
— BMitch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.