Итак, попробуем попрактиковаться в следующем:
- Создание Docker-образа (Docker Image) для кода автотестов;
- Создание Dockerize Grid для выполнения тестов;
Как мы уже должны знать, Docker создает образы в Docker-контейнерах. Затем этот образ работает как сервис в Docker-Compose-файле для запуска тест-кейсов в Grid.
Что нам нужно:
- Установить Docker;
- Установить Java, Maven, Eclipse;
Разбираемся с Dockerfile

Команды:
- FROM — принять «maven:3.6.1-jdk-8-alpine» как начальный образ.
- RUN — добавить/обновить (установить) bash
- COPY — копировать pom.xml c локальной машины в папку /app внутри docker-контейнера
- COPY src /app/src — скопировать папку src из локальной машины /app/src в Docker-контейнер
- далее COPY — копировать файл healthcheck.sh из локальной машины в папку /app в контейнере.
- WORKDIR /app/ — создать папку /app/ в контейнере, которая будет папкой проекта.
- ENTRYPOINT — первый запуск команды после запуска контейнера. Настройка оболочки
- CMD — запуск описанных выше команд из shell-файла после запуска контейнера.
Уясним назначение файла healthcheck.sh: это файл оболочки, куда добавляем все команды, нужные для запуска автотестов.

- Команда echo здесь — для вывода сообщения о том, что HUB доступен. HUB_HOST это переменная в которую записан IP-адрес Selenium Hub.
- Проверка статуса этого Hub’а — доступен ли
- mvn — команда запуска maven-проекта с maven-тестом и передача параметра с опцией -D в виде IP-адреса Selenium-хаба в код автоматизации.
Билд Docker Image
- Надо открыть терминал с локацией Dockerfile.
- Запустить команду со скрина ниже, чтобы создать образ.

docker: запуск одной из команд Docker
build: билдить образ
-t: присвоить образу тег с названием “latest”
uiautomation: имя образа
. (точка) : обозначает, что Dockerfile расположен в текущей папке
После запуска этой команды увидим в терминале:

После создания образа можно проверить, создался ли он:

Создание Dockerize GRID
Теперь настроим Selenium Grid с docker-compose и добавим в него наш образ кода автоматизации, чтобы далее запустить docker-compose и выполнить тест с применением “докеризованного” кода и Grid.
В официальном репозитории Selenium Docker много пре-билдов образов для hub, chrome-node, firefox-node. Ниже показан YAML-файл с некоторыми компонентами. Пользуясь docker-compose, можно манипулировать разными docker-образами.

Здесь:
- hub: Selenium Hub
- сhrome: Chrome Node
- test: образ кода автоматизации
- version: версия docker-compose
- services: управление разными образами
- image: имя образа с тегом
- ports: номер порта, на котором сервис будет доступен с компьютера (Host Machine). Выполняет маппинг портов из Docker Container в Host Machine
- depends_on: показывает зависимости между сервисами. Depends_on не ожидает готовности хаба перед запуском теста. Поэтому применяем curl-команду в файле entrypoint.sh для проверки доступности хаба, перед тем как запустить тест на выполнение.

environments: добавляет все нужные переменные окружения. Мы передаем переменную HUB_HOST, которая содержит IP-адрес хаба Selenium Hub. Посмотрим на код, где применяется эта переменная. Selenium Grid слушает порт 4444. Значит нам нужен RemoteWebDriver для GRID.

volumes: Для получения отчетов после выполнения тестов.

Теперь запускаем docker-compose
Сначала настраиваем VNC Server: мы хотим видеть, что происходит в браузере, поэтому использовали «дебаг-версию» chrome node (image: selenium/node-chrome-debug:latest) в docker-compose-файле. Там есть VNC-сервер, так что можем видеть браузер во время выполнения тестов.
Хост-компьютер откроет окно VNC-сервера через порт 9090. После завершения настройки VNC-сервера пробуем открыть адрес http://localhost:9090, он откроется ниже и спросит пароль. Применяем дефолтный пароль как “секретный”.

Запуск Docker-Compose: теперь можем запустить команду docker-compose, чтобы начать выполнение. Она сначала начнет загружать все нужные образы на локальную машину, потому что их пока там нет. Просто запускаем следующую команду в терминале из места, где файл docker-compose есть:

- Загрузятся все образы:

- Проверяется доступность HUB’а:

- Запускает выполнение теста и пробует подтянуть все нужные зависимости в докер-контейнер.
- После этого запускает выполнение тест-кейса, который мы видели на VNC-сервере. (После выполнения дается команда остановки всех сервисов: docker-compose down)

