Múltiples Dockerfiles en el proyecto


¿Cómo se organizan los Dockerfiles pertenecientes a un proyecto cuando se tiene un Dockerfile para la base de datos, otro para el servidor de aplicaciones, etc.? ¿Creáis algún tipo de jerarquía en la fuente? Un gran proyecto empresarial no puede consistir en un solo archivo Dockerfile?

 116
Author: miyalys, 2014-12-10

6 answers

Acabo de crear un directorio que contiene un Dockerfile para cada componente. Ejemplo:

Cuando construya los contenedores, simplemente dé el nombre del directorio y Docker seleccionará el archivo Docker correcto.

Nota de autor

Esta respuesta está desactualizada. La figura ya no existe y ha sido reemplazada por Docker compose

 4
Author: Mark O'Connor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:24

En nuevas versiones (>=1.8.0) de docker, puede hacer esto

docker build -f Dockerfile.db .
docker build -f Dockerfile.web .

Una gran salvada.

EDITAR: actualizar versiones según el comentario de raksja

 173
Author: Shuo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-13 19:06:41

Uso docker-compose y varios Dockerfile en directorios separados

No cambie el nombre de su Dockerfile para Dockerfile.db o Dockerfile.web, es posible que no sea compatible con su IDE y perderá el resaltado de sintaxis.

Como Kingsley Uchnor dijo, puede tener múltiples Dockerfile, uno por directorio, que representan algo que desea construir.

Me gusta tener una carpeta docker que contiene cada aplicación y su configuración. Aquí hay un proyecto de ejemplo jerarquía de carpetas para una aplicación web que tiene una base de datos.

docker-compose.yml
docker
├── web
│   └── Dockerfile
└── db
    └── Dockerfile

docker-compose.yml ejemplo:

version: '3'
services:
  web:
    # will build ./docker/web/Dockerfile
    build: ./docker/web
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  db:
    # will build ./docker/db/Dockerfile
    build: ./docker/db
    ports:
      - "3306:3306"
  redis:
    # will use docker hub's redis prebuilt image from here:
    # https://hub.docker.com/_/redis/
    image: "redis:alpine"

docker-compose ejemplo de uso de la línea de comandos:

# The following command will create and start all containers in the background 
# using docker-compose.yml from current directory
docker-compose up -d

# get help
docker-compose --help

Aquí hay algunos comandos rápidos de tldr docker-compose . Asegúrese de consultar la documentación oficial para más detalles.

 33
Author: GabLeRoux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-13 19:42:18

Cuando se trabaja en un proyecto que requiere el uso de varios dockerfiles, simplemente cree cada dockerfile en un directorio separado. Por ejemplo,

Aplicación/ db /

Cada uno de los directorios anteriores contendrá su dockerfile. Cuando se está creando una aplicación, docker buscará en todos los directorios y compilará todos los archivos dockerfiles.

 1
Author: Kingsley Uchnor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-15 17:20:42

Añadir una capa de abstracción, por ejemplo un archivo YAML como en este proyecto https://github.com/larytet/dockerfile-generator que se parece a

centos7: base: centos:centos7 packager: rpm install: - $build_essential_centos - rpm-build run: - $get_release env: - $environment_vars

Un corto script/make de Python puede generar todos los Dockerfiles desde el archivo de configuración

 0
Author: Larytet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-18 07:14:17

En Intellij, simplemente cambié el nombre de los archivos docker a *.Dockerfile, y asociado el tipo de archivo *.Sintaxis de Dockerfile a docker.

 0
Author: KaziMurtaza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-20 03:21:40