Создание предварительно заполненных образов докера - PullRequest
0 голосов
/ 26 апреля 2018

Мы активно используем докер для тестирования интеграции и чтобы сократить время настройки тестовой среды, мы хотели бы создать образы, которые уже содержат тестовые данные в определенной степени.

Для некоторых сервисов мыполагаться на общедоступные образы докеров, которые определяют тома, в которых хранятся данные.

Я заметил, что докер не сохраняет данные, которые хранятся в этих монтируемых томах (определенных базовым образом) во время сборки.Есть также вопросы по этой проблеме, такие как это , это или эта проблема .

Теперь, учитывая, как работает докер, яИнтересно, что было бы хорошим подходом для решения этой проблемы?

Этот вопрос здесь описывает, как я мог бы предварительно заполнить том данными из изображения - что-то вроде противоположноститого, чего я хотел бы достичь.

В настоящее время я настраиваю образы и перемещаю предварительно заполненные данные из монтирования тома в другой каталог в конце сборки.И при запуске контейнера я связываю каждую подпапку обратно с монтируемыми томами.Но это немного уродливо, поскольку мне приходится отдельно связывать каждую подпапку, потому что родительская папка является монтированием тома и не может быть связана.

Существуют ли лучшие способы?Есть ли даже «официальный» способ докера добиться этого?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Ваше замечание «Для некоторых служб мы полагаемся на общедоступные образы докеров, которые определяют объемы, в которых хранятся данные».Похоже, что это связано с вопросом о том, что невозможно «объявить» объем.Я столкнулся с этой проблемой также, когда перенес производственные образы в установку тестирования, и в последнее время я создал обходной путь, который может помочь в этой ситуации.( докер-copyedit ).

0 голосов
/ 26 апреля 2018

Вы можете создать новый образ докера для хранения ваших тестовых случаев и уже встроенных в него тестовых данных.Это может быть создано как с вашим тестовым приложением, так и без него.

Позже вы можете решить, хотите ли вы запускать его как отдельный контейнер для тестирования временных объектов или как часть многоэтапного создания тестового образа, что-тонапример:

FROM alpine:latest
# Start from your vendor image

# Copy your test-data to your container
COPY test-data1 /usr/test-data/case1
COPY test-data2 /usr/test-data/case2

# Add what you need to execute..
CMD [./execute-test]

Затем вы можете run контейнер без даже каких-либо томов и выдавать результаты по мере необходимости, или вы можете использовать многоступенчатые сборки , чтобы захватить ваши тестовые данныев одном изображении и создайте свое тестовое приложение поверх него в два этапа:

FROM mytest-data:latest # Image created as the previous step

FROM mytest-app:latest # Your test-application
WORKDIR /usr/test-data
RUN ./test-app # to execute and capture test results in the build phase

В любом случае, я рекомендую загружать пользовательские изображения в свои собственные репозитории изображений, например AWS ECR или Артефакт и т. д.

...