Несколько докеров в проекте

Как вы организуете 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 в отдельном каталоге. Например,

приложение/ дБ /

Каждый из указанных выше каталогов будет содержать свой файл докеров. Когда приложение строится, докер будет искать все каталоги и строить все док файлы.