Как вы организуете 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 в отдельном каталоге. Например,
приложение/ дБ /
Каждый из указанных выше каталогов будет содержать свой файл докеров. Когда приложение строится, докер будет искать все каталоги и строить все док файлы.