Поиск по сайту:

Как использовать Docker для безопасного тестирования программного обеспечения


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

Зачем использовать Docker для тестирования программного обеспечения?

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

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

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

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

Если окажется, что пакет вам не подходит, «удалите» его, просто удалив контейнер Docker в песочнице. В вашей системе не останется и следа.

Поиск образов Docker

Если вы хотите попробовать что-то новое, лучше всего сначала выполнить поиск в Docker Hub и посмотреть, есть ли уже образ контейнера для выбранного вами пакета. Образы предоставляют готовые к использованию развертывания определенного программного обеспечения, аналогичные ISO-образу виртуальной машины, предварительно сконфигурированному с набором пакетов.

Многие популярные проекты теперь предлагают официальные образы Docker в составе своих релизов. Они четко обозначены на Docker Hub зеленым значком «Официальное изображение».

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

Вы также должны убедиться, что образ имеет вариант для нужной версии программного обеспечения. Изображения различают разные версии с помощью тегов Docker, таких как mongo:5 для MongoDB 5 и mongo:4 для MongoDB 4. Используйте представление тегов Docker Hub, чтобы просмотреть доступные параметры и когда они последний раз обновлялись.

Использование изображения

Как только вы нашли образ, запустите из него контейнер. Вам следует обратиться к описанию вашего образа на Docker Hub, чтобы получить конкретные инструкции для выбранного вами программного обеспечения.

В общем случае образы, упаковывающие интерактивное приложение, можно запускать с помощью такой последовательности:

docker run -it example-image:latest

Вместо этого запускайте изображения, которые обеспечивают фоновые процессы, с флагом -d:

docker run -d example-image:latest

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

Что делать, если изображения нет?

Отсутствие официального — или неофициального — образа Docker для выбранного вами программного пакета — это не конец вашего путешествия с Docker. В этом случае создайте контейнер из базового образа операционной системы для размещения вашей изолированной среды. Затем вы можете запустить обычную процедуру установки программного обеспечения, чтобы загрузить его в свой контейнер.

Вот пример запуска новой среды Ubuntu в Docker:

docker run -it ubuntu:20.04

Флаги -it означают, что вы попадете в интерактивную оболочку, работающую в терминале. Теперь вы можете использовать apt, curl, wget или любые другие необходимые шаги, чтобы установить и попробовать ваш целевой пакет.

apt update
apt install example-package
example-package --example-flags

Если вы захотите повторить эти шаги снова в будущем, напишите Dockerfile, который позволит вам создать свой собственный образ:

FROM ubuntu:20.04
apt update
apt install example-package
ENTRYPOINT ["example-package"]
CMD [""]

Создайте свой образ:

docker build -t example-package:latest .

Теперь используйте свой образ для запуска контейнера, который автоматически запускает двоичный файл example-package, добавленный в базовый образ Ubuntu:

docker run -it example-package:latest --example-flags

Это работает, потому что двоичный файл установлен как команда образа Docker в вашем файле Docker. Он будет запускаться автоматически при запуске контейнера, получая флаги, которые вы передаете docker run.

Создание снимков

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

Используйте команду docker commit, чтобы создать новый образ из файловой системы контейнера:

docker commit my-container package-snapshot:latest

Вы должны заменить my-container идентификатором или именем вашего контейнера. Вы можете получить эти сведения, запустив docker ps, который показывает все запущенные контейнеры в том порядке, в котором они были запущены. Команда пометит снимок изображения как package-snapshot:latest.

Теперь вы можете применять любые необходимые изменения к существующему контейнеру, не беспокоясь о нарушении текущего состояния. Если вы хотите выполнить откат, используйте docker run, чтобы запустить другой контейнер из образа package-snapshot:latest.

Убираться

Когда вы закончили экспериментировать, Docker позволяет легко «удалить» ваше программное обеспечение, не оставив следов. Сначала удалите свои контейнеры:

docker rm my-container

Затем очистите загруженные изображения:

docker rmi example-image:latest

Теперь вы вернулись к чистому состоянию. Поскольку все, что связано с программным обеспечением, существовало только внутри вашего контейнера, файловая система вашего хоста останется неизменной.

Постоянные данные

Одна из проблем, с которой вы можете столкнуться, — это когда вы хотите приостановить свои пробные версии и возобновить их позже. Контейнеры Docker сбрасывают свое состояние при остановке, поэтому любые сделанные вами изменения файловой системы, такие как добавление файлов конфигурации, будут потеряны.

Вы можете решить эту проблему, установив тома в контейнер, чтобы важные файлы сохранялись на вашем хосте. Используйте для этого флаг -v с docker run.

docker run -it -v config-volume:/etc/example-package/conf.d example-package:latest

Тома живут дольше отдельных контейнеров, поэтому вы можете восстановить свои файлы в новый контейнер, указав те же флаги -v. Удалите тома с помощью команды docker volume rm.

Заключение

Docker — это быстрый и простой способ безопасно опробовать программное обеспечение, не загрязняя среду вашего хост-компьютера. Это позволяет вам сортировать новые пакеты перед их внедрением в чувствительные системы и аппаратное обеспечение без ПО.

Использование Docker дает возможность сканировать программное обеспечение перед его запуском. Встроенный компонент Docker Scan выявляет уязвимости в пакетах в образе, предоставляя вам обзор последствий для безопасности. Используйте docker scan example-package:latest для сканирования загруженных изображений.

Вы можете продолжать использовать установку программного обеспечения Dockerized после первоначального эксперимента. В качестве альтернативы вы можете использовать то, что вы узнали, для установки работающей установки на «голое железо» с большей уверенностью в том, что пакет делает то, на что он заявлен.