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?

Lloyd R. Prentice
fonte

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.

tk_
fonte
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.

Sahil Ahuja
fonte
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 .
garryp
fonte
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 :)

Dirk Eddelbuettel
fonte
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.

Ashley Aitken
fonte
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.

Shivaraj Navalgund
fonte
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.

Josh Habdas
fonte
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

ktamlyn
fonte
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 .
Abel
fonte