Используйте 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's 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 . Обязательно обратитесь к официальной документации для получения более подробной информации.