Вы знаете, что вы должны Проверьте все …
Не так ли?
Что ж, писать модульный тест на Docker должен быть частью вашей ежедневной рутины при разработке нового DockerFile. Он может сэкономить вас закручивать время, проведенное запуск докера, пытаясь выяснить, почему не работает, и он резко уменьшит ваш страх восстановления и обновления контейнера (если вы все еще не верьте мне на тестирование, прочитайте эту статью Джеймс Шор ).
В этом руководстве вы узнаете: Какие инструменты могут помочь вам тестировать свой DockerFile, как написать тест подразделения для Docker и как автоматизировать его в непрерывной интеграционной трубопроводке.
Докерная контейнерная структура
Лучший инструмент, который я могу raccomand написать тест подразделения для Docker — это Тест структуры контейнера фреймворк. Эта рамка, разработанная Google, делает Super легко проверить структуру вашего изображения контейнера.
Как установить
Если вы используете Linux Run:
curl -LO https://storage.googleapis.com/container-structure-test/latest/container-structure-test-linux-amd64 && chmod +x container-structure-test-linux-amd64 && sudo mv container-structure-test-linux-amd64 /usr/local/bin/container-structure-test
Варианты теста
Тест на конструкцию контейнеров предлагает 4 типа теста:
- Командные тесты : Выполните команду на своем изображении и проверьте вывод
- Испытания существования файлов : Проверьте, есть ли файл или нет, присутствует на изображении
- Тесты содержимого файла : Проверьте содержимое файла
- Тест метаданных : Проверьте, правильно ли метаданные контейнера
Как написать тест докера
Все, что вам нужно, это Dockerfile и .yaml
или .json
Файл, который содержит ваши тестовые случаи.
Напишите свой первый тест докера
Для этого примера мы будем использовать следующие Dockerfile для изображения, который можно использовать в CI для создания кода, используя Базель Отказ
FROM ubuntu:bionic RUN apt-get update \ && apt-get install -y curl gnupg \ && curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpg \ && mv bazel.gpg /etc/apt/trusted.gpg.d/ \ && echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" > /etc/apt/sources.list.d/bazel.list \ && apt-get update \ && apt-get install -y bazel \ && rm -rf /var/lib/apt/lists/* RUN groupadd -g 1000 user \ && useradd -d /home/user -m -u 1000 -g 1000 user \ && chown -R user:user /home/user \ && mkdir -p /bazel/cache \ && chown -R user:user /bazel RUN echo "build --repository_cache=/bazel/cache">/home/user/.bazelrc
И может быть построен с:
docker build -t docker-unit-test .
Теперь у нас есть образец докера, который мы настроили в качестве root, но на CI, мы хотим подражать среду создания разработчиков максимально возможным, чтобы сделать это, мы будем запускать сборку в качестве неправочного пользователя.
Что может пойти не так?
Многое на самом деле!
У пользователя собственные файлы конфигурации сборки? Или папка кэша? Ну, вы можете проверить все это, прежде чем развернуть изображение докера в любом месте.
Давайте создадим Unit-test.yaml
Чтобы проверить это!
schemaVersion: '2.0.0' fileExistenceTests: - name: 'Check bazel cache folder' path: '/bazel/cache' shouldExist: true uid: 1000 gid: 1000 isExecutableBy: 'group' fileContentTests: - name: 'Cache folder config' path: '/home/user/.bazelrc' expectedContents: ['.*build --repository_cache=/bazel/cache.*']
Первый тест Проверьте папку Bazel Cache
Убежно проверить, что папка кэша существует и принадлежит пользователю Non-root. Второй тест Кэш Папка конфиг
Убежно проверять, что содержимое файла конфигурации Bazel Build настолько ожидается.
Все установлено, мы можем запустить наш тест таким образом:
$ container-structure-test test --image docker-unit-test --config unit-test.yaml ======================================= ====== Test file: unit-test.yaml ====== ======================================= === RUN: File Content Test: cache folder config --- PASS duration: 0s === RUN: File Existence Test: Check bazel cache folder --- PASS duration: 0s ======================================= =============== RESULTS =============== ======================================= Passes: 2 Failures: 0 Duration: 0s Total tests: 2 PASS
Эта структура может быть супер полезной для тестирования вашего образа Docker перед отправкой его, это быстро и легко в использовании.
Автоматизировать тестирование контейнеров докеров
Хорошо, теперь у нас есть наш DockerFile и Tests Ready, пришло время автоматизировать процесс тестирования!
В этом примере я предполагаю, что у вас есть Anbible Трубопровод, который вы используете в Integration Continuos, чтобы построить, тег и толкать изображение докера. Мы собираемся создать новую задачу для этого трубопровода для выполнения теста докера.
- name: unit test Docker Image shell: | container-structure-test test --image {{ docker_image }} --config {{ test_file }} if $? then echo "Test Failed" exit 1 else echo "Test Succeeded" exit 0 fi
Это оно!
Добраться до меня в Twitter @Gasparevitta и Позвольте мне знать ваши мысли!
Я надеюсь, что вы найдете его полезным, и вы начнете тестировать свой DockerFile отныне.
Вы можете найти фрагменты кода на Гадость
Эта статья была первоначально опубликована на мой блог . Голова там, если вам нравится этот пост и хочу прочитать других, как это!
Оригинал: «https://dev.to/gasparev/docker-unit-test-how-to-test-a-dockerfile-guide-2020-435d»