¿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.webcomo configuración de ejecución. Así que creé un problema: youtrack.jetbrains.com/issue/WEB-28185docker-compose.ymlarchivo, por ejemplo?Uso
docker-composey múltiplesDockerfileen directorios separadosComo dijo Kingsley Uchnor , puede tener múltiples
Dockerfile, uno por directorio, que representan algo que desea construir.Me gusta tener una
dockercarpeta 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.ymlejemplo:docker-composeejemplo 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
Dockerfileen un directorio comodocker/web/Dockerfile, todo lo que necesita es configurar la compilacióncontextdedocker-compose.ymlesta manera:De esta manera, podrás tener cosas como esta:
y una
./docker/web/Dockerfilecomo 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?webproyecto desde.(endocker-compose.yml:)build: .. De esta manera,webtiene 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 ladockerlínea de comandos y esta respuesta muestra cómo hacerlo con docker-compose: stackoverflow.com/a/45353241/ 1092815-fLa opción está bien, pero prefiero usarladocker-composecon subcarpetas. Creo que ambas respuestas son válidas. Es posible que la mayoría de las personas prefieran mantener elDockerfilenombre 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 unphparchivo cuando lo usoDockerfile.php, pero sí, funciona. He visto algunos ejemplos en la documentación de la ventana acoplable;Dockerfile.build,Dockerfile.debugetc.example.Dockerfilemantiene 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