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