Запуск golos ноды в контейнере докера

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

Ну вообщем к делу. Для запуска понадобится естественно сам докер. Установить можно пользуясь инструкцией к примеру для ubuntu расположенной тут

https://docs.docker.com/install/linux/docker-ce/ubuntu/

Дальше нам понадобится образ с golos-демоном. Есть два способа получить этот образ. Можно воспользоваться готовым образом из официального хаба докера или собрать самому.

Самостоятельная сбока образа.

Такой способ может понадобится если нету готового, нужного вам образа в хабе докера, но есть Dockerfile для сборки. Goloscore поддерживает в актуальном состоянии Dockerfile для сборки образа с демоном голоса им мы и воспользуемся.

Допустим наша цель собрать образ для запуска хардфорка от Гороха. :) Для этого нам понадобятся исходники. Воспользуемся командой git — ее можно установить воспользовавшись к примеру apt в ubuntu или любым другим способом.

Клонируем репозиторий и переключаемся на нужный релиз
#> git clone https://github.com/gropox/golos.git
#> cd golos
~/golos #>  git checkout gropox-0.17.1
~/golos #>  git submodule update --init --recursive
Запускаем сборку образа

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

Запускаем сборку

~/golos #> docker build . -f Dockerfile -t gropox-17
Sending build context to Docker daemon  58.29MB
Step 1/18 : FROM phusion/baseimage:0.9.19
 ---> c39664f3d4e5
Step 2/18 : ENV LANG=en_US.UTF-8
 ---> Using cache
 ---> 2467fc9cd257
....

Если все прошло удачно, у вас будет готовый образ

~/golos #> docker images gropox*
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
gropox-17           latest              70647dfb7d19        20 minutes ago        1.23GB

Вариант номер два - скачать образ из docker hub

Нет ничего проще. К примеру, чтобы скачать продуктивную версию голоса можно выполнить следующую команду

#> docker pull goloschain/golos:v0.16.4

Запуск контейнера

Подготовка

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

Я лично создаю отдельного пользователя, для запуска контейнера и в домашней папке пользователя создаю нужные мне директории. Допустим мы все будет запускать от имени пользователя golosd. Не забудьте добавить пользователя в группу docker Понадобятся две папки. Одна рабочая под блокчейн и другая с конфигурационными файлами.

/home/golosd #> mkdir -p ~/home/blockchain
/home/golosd #> mkdir -p ~/home/p2p
/home/golosd #> mkdir -p ~/home/logs/p2p
/home/golosd #> mkdir -p ~/config

Из папки с исходниками (допустим это директория golos в вашей домашней папке) скопируйте конфигурационные файлы

/home/golosd #> cp ~/golos/documentation/seednodes ~/config/
/home/golosd #> cp ~/golos/contribution/config.ini ~/config/

И скопируйте снепшот из директории с исходниками в рабочую папку

/home/golosd #> cp ~/golos/programs/golosd/snapshot5392323.json ~/home/

Запуск.

Отредактируйте ~/config/config.ini на ваше усмотрение или используйте свой старый, если есть.

#> docker run \
       -it \
       -p 0.0.0.0:8090:8090 \
       -v /home/golosd/config/:/etc/golosd \
       -v /home/golosd/home/:/var/lib/golosd/ \
       -d --name golosd \
       -t gropox-17

-it — запускаем контейнер в интерактивном режиме
-p 127.0.0.1:8090:8090 — пробрасываем 8090 порт из контейнера наружу (если нужен доступ скриптами)
-v /home/golosd/config/:/etc/golosd — монтируем папку ~/config как /etc/golosd в контейнере
-v /home/golosd/home/:/var/lib/golosd/ — монтируем папку ~/home как /var/lib/golosd в контейнере
-d --name golosd — демонизируем контейнер и задаем имя контейнеру golosd
-t gropox-17 — указываем, какой образ использовать. В данном случае собранный вручную, или можно указать -t goloschain/golos:v0.16.4 для использования официального образа goloscore.

Собственно все. Проверить работоспособность можно командой

#> docker logs --tail 40 golosd

Остановить

#> docker stop golosd

Продолжить работу контейнера

#> docker start golosd

shared memory

По умолчанию нода положит shared_memory* файлы в директории /home/golosd/home/blockchain

В конфигурационном файле можно указать другое место, где ноде следует создать файл.

shared-file-dir=/shm

В свою очередь можно при создании контейнера смонтировать /dev/shm как /shm внутрь образа тем самым позволив контейнеру поместить shared_memory файлы в рамдиск. Что позволит ускорить синхронизацию ноды.

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

golosdхардфоркdockergolos
756
30.804 GOLOS
10
В избранное
Горохъ
Ни черта не понимаю, но пытаюсь разобраться.
756
10

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (14)
Сортировать по:
Сначала старые