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?
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
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
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
paraDockerfile.db
oDockerfile.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.
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.
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
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.
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