Установка и запуск тестовой сети EOS с использованием docker-контейнеров

avatar arkadiy 1 year ago

Установка и запуск тестовой сети EOS с использованием docker-контейнеров

В качестве вступления

Что такое docker?

Docker - это программное обеспечение для автоматизации развертывания и управления приложением в изолированном окружении. Он позволяет "упаковать" приложение со всем его окружением и зависимостями в контейнер, который в последствии с легкостью может быть перенесен на любую Linux-систему. Во избежание путаницы сразу дам пару определений, которые будут часто встречаться.
Docker-образ (image) - это что-то вроде самостоятельной файловой системы. Служит в качестве основы для docker-контейнера. Можно воспринимать docker-образ как шаблон, из которого производится развертывание приложения вместе с необходимым окружением, который не имеет состояния и не изменяется со временем. Docker-контейнер (container) - фактически, это запущенный процесс операционной системы в изолированном окружении с подключенной файловой системой из docker-образа.

Почему именно docker?

Не смотря на то, что EOS имеет несколько вариантов установки, я предпочитаю использовать Docker по следующим причинам:

  • Docker изолирует среду выполнения
  • Готовый образ можно без проблем перенести на другую машину
  • Для локальной разработки под EOS уже есть готовый docker-образ

Установка Docker

Docker бывает двух видов: Community Edition (CE) и Enterprise Edition (EE). Нас интересует CE.
Установка проста и ничем не отличается от установки любого другого приложения.

  • Переходим на страницу https://docs.docker.com/install
  • Выбираем установочный файл для нашей системы
  • Запускаем и следуем инструкциям на страничке, с которой производили загрузку

Варианты запуска EOS с помощью Docker

Существует два варианта для поднятия локальной тестовой сети EOS с использованием Docker:

  • Загрузка готового образа из репозитория Docker
  • Создание Docker-образа из исходных файлов

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

Создание docker-образа из исходников EOS, запуск тестовой сети

Создание docker-образа

git clone https://github.com/EOSIO/eos.git --recursive  --depth 1
cd eos/Docker
docker build . -t eosio/eos

Клонируем репозиторий eos и все необходимые подмодули.
Переходим в папку "Docker" внутри проекта
Создаем docker-образ с тегом "eosio/eos"

Для сборки образа Docker использует набор инструкций, описанный в Dockerfile.
Параметр -t назначает создаваемому образу т.н. тег - человекопонятное название для образа, которое мы сможем впоследствии использовать для запуска контейнера.

nodeos и keosd

Теперь, когда у нас есть образ, готовый для запуска, я должен объяснить, из чего состоит экосистема EOS.
На самом деле, EOS - это несколько программ, выполненных в виде микросервисов, взаимодействующих друг с другом по протоколу http.

nodeos - сервис, который отвечает за производство блоков.
keosd - сервис, предназначенный для хранения данных о пользовательских кошельках.
Есть еще cleos, но это всего-лишь CLI для ручного взаимодействия с сервсисами.

Создание томов для хранения данных

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

Как мы помним, контейнер - это всего лишь процесс, запущенный в нашей системе. Данные внутри контейнера существуют только до тех пор, пока мы не остановим процесс.
Volume - это наиболее предпочтительный способ работы с данными, которые нужно сохранять между запусками контейнера.
Например, в результате работы keosd, создается файл default.wallet, в котором хранятся наши пары <публичный ключ> - <приватный ключ>.
Мы бы не хотели терять этот файл с каждым перезапуском keosd, поэтому мы создаем том, который будет хранить наши данные отдельно от контейнера и монтироваться каждый раз, когда нам потребуется. Этот том никак не зависит от файловой структуры на нашей локальной машине. Он хранится и управляется Docker'ом.

docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume

Здесь мы создаем два тома. Один для keosd. Один - для nodeos.
Параметр --name задает имя тома, которое позволяет контейнеру подключать именно тот самый том, с которым он работал до остановки.

Запуск nodeos и keosd

docker-compose up -d

Поднимаем оба сервиса и переводим их в фоновый режим.

docker-compose поставляется вместе с Docker'ом и служит для управления сложными проектами, которые состоят из нескольких сервисов. В нашем случае, docker-compose читает файл docker-compose.yml, в котором хранится конфигурация для запуска keosd и nodeos, и стартует оба.

Другие статьи и ресурсы Вы можете найти тут.

Для всех, кому инетерсен EOS присоединяйтесь в эту группу в телеграме.