Среда производства/сборки/отладки/тестирования Dockerfile

Представьте, что у вас есть веб-приложение и несколько исполнителей рабочих процессов:

  • http-сервер (обслуживающий файлы активов перед сборкой) — производство
  • билдер (компиляция/сборка js/css/html из исходников) - развертывание/разработка
  • отладчик/построитель (создание из исходников на лету, добавление исходных карт js) - разработка
  • selenium (запуск тестов) - интеграционное тестирование

Как мы можем создать многоуровневые образы, чтобы эти исполнители рабочих процессов работали наиболее эффективно? Под эффективным я подразумеваю «быстрее всего работать и меньше всего писать».


comment
Ну, есть еще модульное тестирование, но это, наверное, другое.   -  person Vanuan    schedule 01.03.2016
comment
Это не дубликат: stackoverflow.com/ вопросов/28169098/ Это немного отличается. Это более общий.   -  person Vanuan    schedule 01.03.2016


Ответы (1)


Ответ может быть простым: просто создайте 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.

  1. Монтировать тома Вообще пропустить отправку контекста, просто использовать монтирование томов во время выполнения (используя -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
comment
Это может не сработать для всех исполнителей/отладчиков/сборщиков тестов, но это идеал, к которому мы должны стремиться. ИМХО. - person Vanuan; 02.03.2016