usar tutorial subir implementar imagen hub crear contenedor como docker

tutorial - Múltiples Dockerfiles en proyecto



tutorial docker file (6)

¿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?


Nota del autor

Esta respuesta está desactualizada. Fig ya no existe y ha sido reemplazado por Docker compose .

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.


Use docker-compose y múltiples Dockerfile en directorios separados

No cambie el nombre de su Dockerfile a Dockerfile.db o Dockerfile.web , es posible que su IDE no lo admita y perderá el resaltado de sintaxis.

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

Me gusta tener una carpeta docker 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 docker ├── web │   └── Dockerfile └── db    └── Dockerfile

Ejemplo de docker-compose.yml :

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"

ejemplo de uso de línea de comando docker-compose :

# 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

En caso de que necesite archivos de carpetas anteriores al construir su Dockerfile

Todavía puede usar la solución anterior y colocar su Dockerfile en un directorio como docker/web/Dockerfile , todo lo que necesita es establecer el context compilación en su docker-compose.yml esta manera:

version: ''3'' services: web: build: context: . dockerfile: ./docker/web/Dockerfile ports: - "5000:5000" volumes: - .:/code

De esta manera, podrás tener cosas como esta:

config-on-root.ini docker-compose.yml docker └── web    ├── Dockerfile    └── some-other-config.ini

y un ./docker/web/Dockerfile como este:

FROM alpine:latest COPY config-on-root.ini / COPY docker/web/some-other-config.ini /

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


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

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

Un breve script / make de Python puede generar todos los Dockerfiles del archivo de configuración.


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á en todos los directorios y compilará todos los dockerfiles.



En Intellij, simplemente cambié el nombre de los archivos docker a * .Dockerfile y asocié el tipo de archivo * .Dockerfile a la sintaxis de docker.