Ответ может быть простым: просто создайте 4 Dockerfile
в зависимости от другого.
Вы можете добавить том, чтобы поделиться сборкой из исходников. Вопрос в том, хотите ли вы, чтобы результирующие активы включались в образ или каждый раз собирали его из исходников.
Создайте 4 папки, чтобы в каждой было Dockerfile
.
Производство
production/Dockefile
:
FROM # put server here
COPY # put config here
# some other option
# volume sharing?
Создать
build/Dockerfile
:
# install dependencies
ADD # add sources here
RUN # some building script
Отладка
debug/Dockefile
:
# ideally, configure production or build image
Тест
test/Dockefile
:
FROM # import production
# install test dependencies
RUN # test runner
Есть также несколько вариантов. 1. Используйте .gitignore с отрицательным шаблоном (или ADD?)
*
!directory-i-want-to-add
!another-directory-i-want-to-add
Плюс используйте команду docker, указав dockerfiles и контекст:
docker build -t my/debug-image -f docker-debug .
docker build -t my/serve-image -f docker-serve .
docker build -t my/build-image -f docker-build .
docker build -t my/test-image -f docker-test .
Вы также можете использовать разные файлы gitignore.
- Монтировать тома Вообще пропустить отправку контекста, просто использовать монтирование томов во время выполнения (используя
-v host-dir:/docker-dir
).
Итак, вам придется:
docker build -t my/build-image -f docker-build . # build `build` image (devtools like gulp, grunt, bundle, npm, etc)
docker run -v output:/output my/build-image build-command # copies files to output dir
docker build -t my/serve-image -f docker-serve . # build production from output dir
docker run my/serve-image # production-like serving from included or mounted dir
docker build -t my/serve-image -f docker-debug . # build debug from output dir
docker run my/serve-image # debug-like serving (uses build-image with some watch magic)
person
Vanuan
schedule
01.03.2016