¿Cómo organiza los Dockerfiles que pertenecen a un proyecto cuando tiene un Dockerfile para la base de datos, uno para el servidor de aplicaciones, etc.? ¿Creas algún tipo de jerarquía en la fuente? ¿Un gran proyecto empresarial no puede consistir en un solo Dockerfile?
214
Respuestas:
Nota del autor
Esta respuesta está desactualizada. Fig ya no existe y ha sido reemplazado por Docker compose . Las respuestas aceptadas no se pueden eliminar ...
Docker Compose apoya la construcción de la jerarquía de proyectos. Por lo tanto, ahora es fácil admitir un Dockerfile en cada subdirectorio.
Respuesta original
Acabo de crear un directorio que contiene un Dockerfile para cada componente. Ejemplo:
Cuando construya los contenedores, simplemente proporcione el nombre del directorio y Docker seleccionará el Dockerfile correcto.
fuente
En versiones más recientes (> = 1.8.0) de docker , puede hacer esto
Un gran ahorro.
EDITAR: actualizar versiones por comentario de raksja
EDITAR: comentario de @vsevolod: es posible obtener resaltado de sintaxis en el código VS dando archivos. Extensión de Dockerfile (en lugar de nombre), por ejemplo, Prod.Dockerfile, Test.Dockerfile, etc.
fuente
Dockerfile.web
como configuración de ejecución. Así que creé un problema: youtrack.jetbrains.com/issue/WEB-28185docker-compose.yml
archivo, por ejemplo?Uso
docker-compose
y múltiplesDockerfile
en directorios separadosComo dijo Kingsley Uchnor , puede tener múltiples
Dockerfile
, uno por directorio, que representan algo que desea construir.Me gusta tener una
docker
carpeta que contenga cada aplicación y su configuración. Aquí hay una jerarquía de carpetas de proyecto de ejemplo para una aplicación web que tiene una base de datos.docker-compose.yml
ejemplo:docker-compose
ejemplo de uso de línea de comando:En caso de que necesite archivos de carpetas anteriores al construir su Dockerfile
Todavía puede usar la solución anterior y colocarla
Dockerfile
en un directorio comodocker/web/Dockerfile
, todo lo que necesita es configurar la compilacióncontext
dedocker-compose.yml
esta manera:De esta manera, podrás tener cosas como esta:
y una
./docker/web/Dockerfile
como esta:Aquí hay algunos comandos rápidos de tldr docker-compose . Asegúrese de consultar la documentación oficial para más detalles.
fuente
COPY ../package.json /app/package.json
)? Ese archivo generalmente estará en el nivel raíz y la ventana acoplable ha prohibido el acceso al padre. ¿Qué enfoque seguirás?web
proyecto desde.
(endocker-compose.yml
:)build: .
. De esta manera,web
tiene acceso a los archivos raíz al compilar. He visto esta pregunta relacionada: stackoverflow.com/questions/24537340/… y podemos construir desde el directorio principal en su lugar cuando usamos ladocker
línea de comandos y esta respuesta muestra cómo hacerlo con docker-compose: stackoverflow.com/a/45353241/ 1092815-f
La opción está bien, pero prefiero usarladocker-compose
con subcarpetas. Creo que ambas respuestas son válidas. Es posible que la mayoría de las personas prefieran mantener elDockerfile
nombre predeterminado para admitir la mayoría de los IDE listos para usar. No estoy invalidando la primera respuesta, solo estoy brindando una alternativa. Simplemente no me gusta que mi IDE piense que mi Dockerfile es unphp
archivo cuando lo usoDockerfile.php
, pero sí, funciona. He visto algunos ejemplos en la documentación de la ventana acoplable;Dockerfile.build
,Dockerfile.debug
etc.example.Dockerfile
mantiene resaltado de sintaxis e íconos en VSCode.En Intellij, simplemente cambié el nombre de los archivos Docker a * .Dockerfile, y asocié el tipo de archivo * .Dockerfile a la sintaxis de Docker.
fuente
Agregue una capa de abstracción, por ejemplo, un archivo YAML como en este proyecto https://github.com/larytet/dockerfile-generator que se parece a
Un breve script / make de Python puede generar todos los Dockerfiles desde el archivo de configuración.
fuente
Cuando trabaje en un proyecto que requiera el uso de múltiples dockerfiles, simplemente cree cada dockerfile en un directorio separado. Por ejemplo,
app / db /
Cada uno de los directorios anteriores contendrá su dockerfile. Cuando se crea una aplicación, Docker buscará todos los directorios y compilará todos los dockerfiles.
fuente