Docker — быстрый гайд

Что такое Docker?

Docker — технология виртуализации, переносящая приложение в легкое и быстрое окружение (контейнер). Docker — более современная технология, чем виртуальные машины (VM). Контейнеризация в Docker применяется в связке с Selenium, WebDriver и другими QA-инструментами.

Внедрение мультиконтейнерного тестирования в Docker изменило сам уклад современного QA, что касается его интеграции в CI/CD-пайплайн — все зависимости приложения «упаковываются» в изолированное окружение.

Архитектура Docker
Архитектура Docker на официальном сайте

Чем отличается от VM

Docker и виртуальные машины
Docker и виртуальные машины

Технологии Docker и виртуальных машин (VM) имеют общее предназначение, но работают с операционной системой по другому. Главное отличие в том, что Docker-контейнер работает непосредственно в операционной системе, а виртуальная машина «поверх» операционной системы, что влияет на производительность.

DockerVirtual Machine
Операционная системаТа же ОСНовая ОС для каждой VM
Безопасность Менее безопасно, поскольку операционная система та жеБолее безопасно — другая операционная система
Производительность Быстрее работает, даже если одновременно несколько контейнеров Возможны проблемы с производительностью
Время загрузкиОчень быстро (несколько секунд)Медленно (минута)
Сколько памяти требуетсяМало Много 
Сколько места на дискеМегабайты Гигабайты 
Переносимость на другую системуЛегко разворачивать в разных окруженияхТрудно перенести на другую систему

Как видим, безопасность — единственный минус.

Docker и Kubernetes

Docker это система контейнеризации; Kubernetes — система управления контейнерами («оркестрации»); они выполняют разные задачи. При этом Docker обладает собственной системой оркестрации под названием Docker Swarm. Ее и будем сравнивать с Kubernetes:

KubernetesDocker Swarm
Установка Сложная и длительнаяБыстрая и простая
Масштабируемость Автоматическая Недоступна 
Создание кластеровПростое Сложное
Балансировка нагрузкиВручную Автоматическая 
Мониторинг Встроенными средствамиТолько внешними средствами

Jenkins и Docker

Опять же, это продукты с разным предназначением: Jenkins является системой автоматизации CI/CD-пайплайнов, в которые разработчики периодически отправляют свой код; а Docker имеет иную задачу — контейнеризацию. Связка Docker+Jenkins широко применяется в современной разработке: Jenkins «непрерывно интегрирует», а Docker изолирует рабочие окружения в контейнерах.

Контейнеры Docker

Экономят время разработчиков (и тестировщиков), устраняя проблемы с программными зависимостями. 

Что такое Docker-контейнер?

Программа, инкапсулирующая программные зависимости, нужные для запуска приложения. Все конфигурации и инструкции для запуска/остановки контейнера передаются из Docker-образа. При запуске образа создается новый контейнер.

Контейнеры управляются через Docker API или из командной строки. Если созданы несколько контейнеров, ими управляют инструментом Docker Compose.

Контейнеризация Docker
Контейнеризация Docker

Как работает Docker

Docker состоит из 4 компонентов:

  • Клиент. Главный компонент, создающий/управляющий/запускающий контейнеризованные приложения. Управляет Сервером через CLI (командную строку) в Windows и из терминала в MacOS и Linux.
  • Сервер. Также называемый демоном. Ожидает запросов через REST API от Клиента и управляет Образами и Контейнерами.
  • Образ. Дает указания Серверу, как создавать Контейнер. Образы загружаются из сайта (Docker Hub). Также возможно создание кастомных образов, для этого нужно создать Dockerfile и передать его на Сервер. (При этом следует учесть, что Docker не очищает неиспользованные образы, поэтому их нужно удалять самостоятельно).
  • Реестр. Серверное приложение для размещения/распределения Docker-образов. Полезен для локального хранения образов и полного контроля над ними. Возможен другой способ, через Docker Hub — крупнейший репозиторий Docker-образов.
Как работает Docker
Как работает Docker

Преимущества и недостатки Docker

Преимущества

  • Легкая переносимость — основное преимущество. Дает возможность создавать (и тестировать) сложные приложения на локальной машине, не беспокоясь о программных зависимостях — Docker-контейнеры вмещают в себя все что нужно приложению для функционирования
  • Автоматизация работы с контейнерами при помощи cron jobs. Автоматизируются рутинные повторяемые задачи.
  • Комьюнити — есть Slack-канал, форумы и тысячи контрибьюторов на StackOverflow. Кстати, на DockerHub уже более 9 миллионов образов.

Недостатки

  • Скорость — хотя Docker работает явно быстрее, чем стандартная виртуальная машина, но все же медленнее, чем обычный запуск приложения на физическом сервере.
  • Некоторая сложность использования — изначально Docker не создавался для приложений с графическим интерфейсом. Поэтому Docker требует освоения командной строки и работы в ней. Также крутая кривая обучения, сложности с операционными системами и частые обновления. В дальнейшем возможны сложности с оркестрацией контейнеров.
  • Безопасность — так как Docker работает непосредственно в операционной системе, возможно внедрение зловредного кода в контейнеры и далее проникновение в ОС.

Чем полезен джуну

Оценка нового софта

Docker дает возможность ознакомиться с новой программой без ее установки вручную.

Научиться работать в командной строке и в Linux

Хотя Docker работает во всех ОС, он изначально создавался для Linux; и желательно далее работать в Linux, что будет весьма полезно — изучить основы администрирования системы, CLI-интерфейс, скрипты.

Снизить риски при поломке компьютера

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

Польза от Docker в QA на простом примере

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

А раньше такого не было?

Раньше такое было — но хуже. Чтобы наглядно убедиться в этом, нужно сделать следующее (или представить):

  • Поставить Java 8 и Chrome какой-то версии, например v65, на локальный компьютер
  • Написать нужные тестовые сценарии
  • Скопировать сценарий и вставить для выполнения на удаленной машине
  • Попробовать запустить сценарий через Jenkins

Обязательно будут какие-то ошибки. Если загуглить эту ситуацию, чаще всего это “version mismatch”.

А сейчас лучше

А сейчас можно скачать Docker и создать контейнер, в котором изолировать зависимости — создается виртуальная машина и расшаривается для других участников команды. 

Как Docker решает проблему тестовой инфраструктуры в QA

Docker - Grid- Браузеры

Например, есть удаленная машина, на которой установлена Java 8, туда скопирован тестовый сценарий, есть jar Selenium’а, и jar TestNG. Сценарий может запрашивать на другой машине (через Grid/Selenium Hub) многочисленные версии браузеров (Chrome, Firefox), как на рисунке выше. В таких окружениях неизбежны ошибки-эксепшены из-за сложности инфраструктуры (нехватка памяти и так далее).

Что делает Docker с этой проблемой

Docker - Grid- Браузеры - Контейнеризация

Дает всю инфраструктуру для запуска тестов через Grid в Chrome/Firefox и т.п.

Команды Docker

  • docker pull image — Загрузить образ из DockerHub
  • docker images — Посмотреть все образы на своей машине
  • docker ps — Посмотреть все активные контейнеры
  • docker ps -a — Посмотреть все контейнеры
  • docker run image — Сформировать контейнер из образа

Как видим, контейнеры дают возможность упаковать нужные элементы для приложения, не создавая отдельную виртуальную операционную систему. Это дает скорость и экономию места в тестовом окружении. 

Создание контейнера в Docker

Контейнеры Docker
Контейнеры Docker с браузерами

Наш grid будет состоять из 3 компонентов:

  1. Docker-машины с запущенным Docker Engine
  2. Hub
  3. Node-контейнеры с браузерами, подключенными к Hub

«Стандартные» контейнеры запускаются только на одинаковой с ними ОС, а Docker создает и управляет контейнерами на виртуальной машине Linux, даже если работает на Windows. 

Вместо Virtual Box или Hyper-V применяется нативный Windows-гипервизор (оболочка) для управления виртуальной машиной Linux. При запуске Hyper-V-менеджера будет видна работающая виртуальная машина Linux. Эта виртуальная машина запускает демон Docker, который управляет контейнерами.

Появится надпись “Mobi Linux” при запуске Docker Linux-демона, если установить Docker для Windows и запустить его. И наоборот, Windows-контейнер может быть запущен в виртуальной машине Windows в операционных системах Linux/macOS. 

Как Docker упрощает жизнь тестировщику

Не нужно писать специальные скрипты, вручную деплоить билд, настраивать окружение и инструменты на нескольких виртуальных машинах

Если не использовать Docker, придется писать скрипты или вручную настраивать несколько виртуальных машин. Например придется ставить и настраивать Java, Ruby, Python, RSpec, Maven, Selenium, и браузеры, и + еще инструменты автоматизации. Зависимости от платформ, сложности со скриптами, проблемы с настройкой — в целом все долго и ненадежно.

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

Надежное окружение делает доставку практичнее

Можно сливать код новых функций, как только разработчики передали его в feature-ветку, и успешно выполнены автотесты. Состояние билда оценивается повторным запуском автотестов. Код готов к передаче в продакшен-окружение. Не очень удобно полагаться на CI-инструменты и продолжать не имея достаточного тестового покрытия, после релиза проявятся дефекты. На всем протяжении цикла разработки контейнеры Docker обеспечивают надежное окружения для деплоя.

Контейнеры сокращают количество внешних переменных окружения

Так как многие зависимости и конфигурационные данные можно упаковать в контейнер, снижается количество переменных окружения. Непрерывная интеграция (и непрерывное тестирование) становятся еще более непрерывными, что гарантирует — приложение будет одинаково себя вести и в тестовом окружении, и в проде. 

Docker позволяет запускать тесты в разных контейнерах и изолированных окружениях параллельно на Windows- и Linux-машинах. Можно повторно использовать старый контейнер при обновлении кода приложения; всегда можно создать новый контейнер.

Приложение работает одинаково на проде и в тестовом окружении, потому что окружение стабильное. 

Гибкость и простота обслуживания

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

Всегда можно создать контейнер при выполнении тестов. Запуск нового приложения или тест-сьюта в новом контейнере очень простой.

Лучшее эффективность, быстрее доставка, экономия ресурсов

Контейнеризация в Docker совершенствует SDLC-цикл, делает его эффективнее и быстрее, что выгодно всем. Автоматизация сейчас — основная вещь в QA, и Docker, устраняющий зависимость от инфраструктуры, очень удобен и применяется уже повсюду. Поэтому скилл «Docker» обязателен для тестировщика-автоматизатора.

***

Источники: 1,2

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

1 КОММЕНТАРИЙ

Подписаться
Уведомить о
guest

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Tristen Mcknight
Tristen Mcknight
1 месяц назад

Excellent read! Managing cloud servers can feel daunting, but platforms like [] make it effortless without sacrificing performance. Their approach to simplifying server management while ensuring scalability is spot-on—highly recommend for anyone craving a hassle-free hosting experience. Keep the great content coming!

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас