Как вы организуете Dockerfiles, принадлежащие проекту, когда у вас есть один файл Docker для базы данных, один для сервера приложений и т.д.? Создаете ли вы своего рода иерархию в источнике? Крупный проект предприятия не может состоять только из одного файла Docker?
Несколько докеров в проекте
Ответ 1
Примечание автора
Этот ответ устарел. Рис больше не существует и был заменен Docker compose.
Оригинальный ответ
Я просто создаю каталог, содержащий Dockerfile для каждого компонента. Пример:
При сборке контейнеров просто укажите имя каталога, и Docker выберет правильный файл Dockerfile.
Ответ 2
В более новых версиях (> = 1.8.0) Docker вы можете сделать это
docker build -f Dockerfile.db .
docker build -f Dockerfile.web .
Большое спасение.
РЕДАКТИРОВАТЬ: обновить версии в соответствии с комментариями raksja
Ответ 3
Используйте docker-compose и несколько Dockerfile в отдельных каталогах
Не переименовывайте ваш
DockerfileвDockerfile.dbилиDockerfile.web, он может не поддерживаться вашей IDE, и вы потеряете подсветку синтаксиса.
Как сказал Кингсли Учнор, у вас может быть несколько Dockerfile, по одному на каталог, которые представляют собой то, что вы хотите построить.
Мне нравится иметь папку docker, которая содержит каждое приложение и его конфигурацию. Вот пример иерархии папок проекта для веб-приложения с базой данных.
docker-compose.yml
docker
├── web
│   └── Dockerfile
└── db
    └── Dockerfile
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 redis prebuilt image from here:
    # https://hub.docker.com/_/redis/
    image: "redis:alpine"
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
Если вам нужны файлы из предыдущих папок при создании Dockerfile
Вы все еще можете использовать вышеупомянутое решение и поместить свой Dockerfile в каталог, такой как docker/web/Dockerfile, все, что вам нужно, это установить сборку context в вашем docker-compose.yml следующим образом:
version: '3'
services:
  web:
    build:
      context: .
      dockerfile: ./docker/web/Dockerfile
    ports:
     - "5000:5000"
    volumes:
     - .:/code
Таким образом, вы сможете иметь такие вещи:
config-on-root.ini
docker-compose.yml
docker
└── web
    ├── Dockerfile
    └── some-other-config.ini
и ./docker/web/Dockerfile вот так:
FROM alpine:latest
COPY config-on-root.ini /
COPY docker/web/some-other-config.ini /
Вот несколько быстрых команд из tldr docker-compose. Обязательно обратитесь к официальной документации для получения более подробной информации.
Ответ 4
В Intellij я просто изменил имя файла Docker на *.Dockerfile и связал тип файла *.Dockerfile с синтаксисом Docker.
Ответ 5
Добавьте слой абстракции, например, файл YAML, как в этом проекте https://github.com/larytet/dockerfile-generator, который выглядит как
centos7:
    base: centos:centos7
    packager: rpm
    install:
      - $build_essential_centos 
      - rpm-build
    run:
      - $get_release
    env:
      - $environment_vars
Короткий скрипт Python/make может генерировать все файлы Docker из файла конфигурации.
Ответ 6
При работе над проектом, который требует использования нескольких файлов докеров, просто создайте каждый файл docker в отдельном каталоге. Например,
приложение/ дБ /
Каждый из указанных выше каталогов будет содержать свой файл докеров. Когда приложение строится, докер будет искать все каталоги и строить все док файлы.