Como nomear Dockerfiles


140

Não sei como nomear Dockerfiles. Muitos no GitHub usam Dockerfilesem uma extensão de arquivo. Eu lhes dou um nome e uma extensão; se sim o que? Ou eu simplesmente os chamo Dockerfile?

Respostas:


165

Não altere o nome do dockerfile se desejar usar o autobuilder em hub.docker.com. Não use uma extensão para arquivos docker, deixe-o nulo. O nome do arquivo deve ser apenas: (nenhuma extensão)

Dockerfile

no entanto, você pode fazer como abaixo também ...

dev.Dockerfile, uat.Dockerfile, prod.DockerfileEtc.

No VS Code, você pode usar <purpose>.Dockerfilee funciona de acordo.


83
E quando você tem vários Dockerfiles no mesmo diretório?
Visgean Skeloru

@VisgeanSkeloru embora um pouco fora de um aborrecimento que você poderia colocá-los em diretórios diferentes em caso de necessidade, não importa onde eu olhei ele parece estar já estabelecido convenção
orustammanapov

2
@VisgeanSkeloru Não possui vários Dockerfiles no mesmo diretório. O diretório que contém se torna o contexto do docker buildcomando, o que significa que cada imagem será desnecessariamente reconstruída se o arquivo docker de outra imagem for alterado.
Thomas

6
Às vezes, é necessário colocar vários Dockerfiles no mesmo diretório para compartilhar arquivos comuns em contêineres separados, pois o contexto do docker não permite acessar "../some-common-stuff"
Devis L.

O "D" precisa ser capitalizado ou não importa?
NoName 13/06

51

dev.Dockerfile, test.Dockerfile, build.DockerfileEtc.

No VS Code eu uso <purpose>.Dockerfilee ele é reconhecido corretamente.


27

Eu acho que você deve ter um diretório por contêiner com um Dockerfile (sem extensão). Por exemplo:

  /db/Dockerfile
  /web/Dockerfile
  /api/Dockerfile

Quando você cria apenas usa o nome do diretório, o Docker encontra o arquivo Docker. por exemplo:

docker build -f ./db .

Construirá 3 contêineres a partir do seu exemplo?
alvas

@alvas Sim, será
garryp

4
Não é bom o suficiente em muitos casos. O Docker não consegue ver os arquivos. Por exemplo, destino, compilação etc.
Cyva

Podemos executar esse arquivo 3 docker de uma só vez usando o comando docker-compose?
Yogi Ghorecha

16

Se você deseja usar o autobuilder em hub.docker.com, deve ser Dockerfile . Então ai :)


3
Eu acredito que o contexto da questão era mais amplo. Talvez você possa incluir informações adicionais para pessoas que não usam o autobuilder para tornar essa resposta mais completa.
Josh Habdas 06/07/19

16

Parece que isso é verdade, mas, pessoalmente, parece-me um design deficiente. Claro, tenha um nome padrão (com extensão), mas permita outros nomes e tenha uma maneira de especificar o nome do arquivo docker para comandos.

Ter uma extensão também é bom porque permite associar aplicativos a esse tipo de extensão. Quando clico em um Dockerfile no MacOSX, ele o trata como um executável do Unix e tenta executá-lo.

Se os arquivos do Docker tivessem uma extensão, eu poderia dizer ao sistema operacional para iniciá-los com um aplicativo específico, por exemplo, meu aplicativo de editor de texto. Não tenho certeza, mas o comportamento atual também pode estar relacionado às permissões de arquivo.


15

Eu criei dois Dockerfiles no mesmo diretório,

# vi one.Dockerfile
# vi two.Dockerfile

para criar os dois arquivos Dockerfiles,

# docker build . -f one.Dockerfile
# docker build . -f two.Dockerfile

Nota: você deve estar no diretório de trabalho atual.


10

Eu lhes dou um nome e uma extensão; se sim o que?

Você pode nomear seus Dockerfiles da maneira que desejar. O nome do arquivo padrão é Dockerfile(sem extensão) e o uso do padrão pode facilitar várias tarefas ao trabalhar com contêineres.

Dependendo de seus requisitos específicos, você pode alterar o nome do arquivo. Se você está construindo para várias arquiteturas, por exemplo, convém adicionar uma extensão indicando a arquitetura como a equipe resin.io fez para o contêiner HAProxy, como exemplo de ARM com vários contêineres :

Dockerfile.aarch64
Dockerfile.amd64
Dockerfile.armhf
Dockerfile.armv7hf
Dockerfile.i386
Dockerfile.i386-nlp
Dockerfile.rpi

No exemplo fornecido, cada Dockerfile cria a partir de uma imagem upstream diferente, específica da arquitetura. O Dockerfile específico a ser usado para a compilação pode ser especificado usando a --file, -fopção ao criar seu contêiner usando a linha de comando.


1
Eu gosto de usar uma extensão para indicar arquitetura (ou qualquer outra coisa). Diferentemente de outras respostas, todos os arquivos do Docker são simples de encontrar em um diretório grande e desordenado; eles naturalmente se reúnem.
Mike Sherrill 'Recall Cat'

3

Dockerfileé bom se você tiver apenas um arquivo docker (por diretório). Você pode usar o padrão que desejar, se precisar de vários arquivos docker no mesmo diretório - se tiver um bom motivo. Em um projeto recente, havia arquivos docker da AWS e arquivos de ambiente de desenvolvimento local porque os ambientes eram bastante diferentes:

Dockerfile Dockerfile.aws


Eu já vi esse método usado para especificar arquiteturas também. Por exemplo, colocando um Dockerfile.armv7hfpróximo a a Dockerfile.i386.
Josh Habdas

1

Dockerfile (nome e pasta personalizados):

   docker/app.Dockerfile
   docker/nginx.Dockerfile

Construir:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .
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.