Установка и запуск тестовой сети EOS с использованием docker-контейнеров
Установка и запуск тестовой сети 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 присоединяйтесь в эту группу в телеграме.