Cómo nombrar Dockerfiles

140

No estoy seguro de cómo nombrar Dockerfiles. Muchos en GitHub usan Dockerfilesin una extensión de archivo. ¿Les doy un nombre y una extensión? ¿entonces qué? ¿O simplemente los llamo Dockerfile?

Lloyd R. Prentice
fuente

Respuestas:

165

No cambie el nombre del dockerfile si desea usar el autobuilder en hub.docker.com. No use una extensión para los archivos acoplables, déjelo nulo. El nombre del archivo debe ser: (sin extensión)

Dockerfile

sin embargo, también puedes hacer lo siguiente ...

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

En VS Code puede usar <purpose>.Dockerfiley funciona en consecuencia.

tk_
fuente
83
¿Qué pasa cuando tienes múltiples Dockerfiles en el mismo directorio?
Visgean Skeloru
@VisgeanSkeloru aunque un poco de una molestia que podría poner en diferentes directorios si es necesario, no importa donde he mirado que parece estar ya establecida de convenciones
orustammanapov
2
@VisgeanSkeloru No tiene varios Dockerfiles en el mismo directorio. El directorio contenedor se convierte en el contexto del docker buildcomando, lo que significa que cada imagen se reconstruirá innecesariamente si se cambia el dockerfile de otra imagen.
Thomas
66
@Thomas a veces necesitas colocar múltiples Dockerfiles en el mismo directorio para compartir archivos comunes a través de contenedores separados, porque el contexto de Docker no permite acceder a "../some-common-stuff"
Devis L.
¿La "D" tiene que estar en mayúscula o no importa?
NoName
51

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

En VS Code uso <purpose>.Dockerfiley se reconoce correctamente.

Sahil Ahuja
fuente
27

Creo que debería tener un directorio por contenedor con un Dockerfile (sin extensión). Por ejemplo:

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

Cuando construyas solo usa el nombre del directorio, Docker encontrará el Dockerfile. p.ej:

docker build -f ./db .
garryp
fuente
¿Construirá 3 contenedores a partir de su ejemplo?
alvas
@alvas Sí lo hará
garryp
44
No es lo suficientemente bueno en muchos casos. Docker no puede ver los archivos arriba. Por ejemplo, objetivo, construcción, etc.
Cyva
¿Podemos ejecutar este archivo 3 docker al mismo tiempo usando el comando docker-compose?
Yogi Ghorecha
16

Si quiere usar el autobuilder en hub.docker.com, tiene que serlo Dockerfile . Por lo tanto, allí :)

Dirk Eddelbuettel
fuente
3
Creo que el contexto de la pregunta fue más amplio. Tal vez podría incluir información adicional para las personas que no usan el generador automático para que esta respuesta sea más completa.
Josh Habdas
16

Parece que esto es cierto pero, personalmente, me parece un diseño pobre. Claro, tenga un nombre predeterminado (con extensión) pero permita otros nombres y tenga una forma de especificar el nombre del archivo acoplable para los comandos.

Tener una extensión también es bueno porque permite asociar aplicaciones a ese tipo de extensión. Cuando hago clic en un Dockerfile en MacOSX, lo trata como un ejecutable de Unix e intenta ejecutarlo.

Si los archivos Docker tuvieran una extensión, podría decirle al sistema operativo que los inicie con una aplicación en particular, por ejemplo, mi aplicación de editor de texto. No estoy seguro, pero el comportamiento actual también puede estar relacionado con las autorizaciones de archivos.

Ashley Aitken
fuente
15

He creado dos Dockerfiles en el mismo directorio,

# vi one.Dockerfile
# vi two.Dockerfile

para construir el uso de Dockerfiles,

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

Nota: debe estar en el directorio de trabajo actual.

Shivaraj Navalgund
fuente
10

¿Les doy un nombre y una extensión? ¿entonces qué?

Puede nombrar sus Dockerfiles como quiera. El nombre de archivo predeterminado es Dockerfile(sin una extensión), y usar el predeterminado puede facilitar varias tareas mientras se trabaja con contenedores.

Dependiendo de sus requisitos específicos, es posible que desee cambiar el nombre del archivo. Si está construyendo para múltiples arquitecturas, por ejemplo, es posible que desee agregar una extensión que indique la arquitectura como el equipo resin.io ha hecho para el contenedor HAProxy, su ejemplo ARM de múltiples contenedores :

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

En el ejemplo proporcionado, cada Dockerfile se crea a partir de una imagen ascendente diferente, específica de la arquitectura. El Dockerfile específico que se usará para la compilación se puede especificar usando la --file, -fopción al construir su contenedor usando la línea de comando.

Josh Habdas
fuente
1
Me gusta usar una extensión para indicar arquitectura (o lo que sea). A diferencia de otras respuestas, todos los Dockerfiles son muy fáciles de encontrar en un directorio grande y desordenado; naturalmente se clasifican juntos.
Mike Sherrill 'Cat Recall'
3

Dockerfilees bueno si solo tiene un archivo acoplable (por directorio). Puede usar el estándar que desee si necesita varios archivos acoplables en el mismo directorio, si tiene una buena razón. En un proyecto reciente había archivos docker de AWS y archivos de entorno de desarrollo local porque los entornos diferían lo suficiente:

Dockerfile Dockerfile.aws

ktamlyn
fuente
También he visto este método utilizado para especificar arquitecturas. Por ejemplo, colocando un al Dockerfile.armv7hflado de a Dockerfile.i386.
Josh Habdas
1

Dockerfile (nombre personalizado y carpeta):

   docker/app.Dockerfile
   docker/nginx.Dockerfile

Construir:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .
Abel
fuente