Запуск 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 файлы в рамдиск. Что позволит ускорить синхронизацию ноды.
Если есть вопросы и замечания, пишите в комментариях. Постараюсь ответить-поправить. Я не администратор, возможно можно все сделать много проще и лучше. Пишите свою статью, я с удовольствием прочитаю, что бы перенять опыт.