怎么使用docker和docker-compose在EOS本地Testnet上开发

发布时间:2021-11-12 10:21:03 作者:小新
来源:亿速云 阅读:172
# 怎么使用docker和docker-compose在EOS本地Testnet上开发

## 前言

区块链技术正在重塑现代互联网基础设施,而EOS作为高性能区块链平台,凭借其高吞吐量和低延迟特性成为DApp开发的热门选择。本文将详细介绍如何利用Docker和Docker Compose搭建本地EOS测试网络(Testnet),为开发者提供完整的本地开发环境解决方案。

通过容器化技术,我们可以快速部署可复现的开发环境,避免复杂的依赖管理和环境配置问题。本文适合有一定Linux基础和区块链概念的开发者,内容涵盖从基础环境搭建到智能合约部署的全流程。

## 一、环境准备

### 1.1 系统要求

- 操作系统:Ubuntu 20.04 LTS或更高版本(推荐)
- 内存:至少8GB RAM(16GB更佳)
- 存储:至少50GB可用空间
- Docker:20.10.0或更高版本
- Docker Compose:1.29.0或更高版本

### 1.2 安装Docker和Docker Compose

```bash
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 验证安装
sudo docker run hello-world

# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

1.3 配置非root用户使用Docker

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

二、EOS Testnet架构设计

2.1 核心组件

一个完整的EOS测试网络需要以下组件:

  1. nodeos:EOS节点核心守护进程
  2. keosd:EOS密钥管理守护进程
  3. cleos:EOS命令行工具
  4. MongoDB插件:可选,用于历史数据存储
  5. Redis插件:可选,用于状态缓存

2.2 网络拓扑设计

我们采用以下结构:

+-----------------------+
|     Docker Network    |
+-----------+-----------+
            |
+-----------v-----------+   +-----------+
|    主节点(nodeos)      <----> MongoDB |
+-----------+-----------+   +-----------+
            |
+-----------v-----------+
|    API节点(nodeos)    |
+-----------------------+

三、使用Docker Compose部署EOS Testnet

3.1 创建项目目录结构

mkdir -p eos-testnet/{config,data,contracts,scripts}
cd eos-testnet

3.2 编写docker-compose.yml

version: '3.8'

services:
  nodeos:
    image: eosio/eos:v2.1.0
    container_name: nodeos
    command: nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::producer_plugin --plugin eosio::http_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:8888 --access-control-allow-origin=* --contracts-console --http-validate-host=false --verbose-http-errors
    ports:
      - "8888:8888"
      - "9876:9876"
    volumes:
      - ./data:/mnt/dev/data
      - ./config:/mnt/dev/config
      - ./contracts:/mnt/dev/contracts
      - ./scripts:/mnt/dev/scripts
    stop_signal: SIGKILL

  keosd:
    image: eosio/eos:v2.1.0
    container_name: keosd
    command: keosd --http-server-address=0.0.0.0:8900
    ports:
      - "8900:8900"
    volumes:
      - ./wallet:/root/eosio-wallet

3.3 配置节点参数

config目录下创建config.ini

# config/config.ini
chain-state-db-size-mb = 1024
reversible-blocks-db-size-mb = 340
contracts-console = true

# 生产者配置
producer-name = eosio
enable-stale-production = true

# 插件配置
plugin = eosio::chain_api_plugin
plugin = eosio::history_api_plugin
plugin = eosio::producer_plugin
plugin = eosio::http_plugin

# HTTP配置
http-server-address = 0.0.0.0:8888
access-control-allow-origin = *
http-validate-host = false
verbose-http-errors = true

# P2P配置
p2p-listen-endpoint = 0.0.0.0:9876
p2p-peer-address = localhost:9876

3.4 启动服务

docker-compose up -d

3.5 验证服务状态

docker-compose ps
docker logs -f nodeos

四、初始化测试网络

4.1 创建系统钱包

docker exec -it keosd bash -c "cleos wallet create --to-console"

4.2 导入开发密钥

docker exec -it keosd bash -c "cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"

4.3 创建系统账户

docker exec -it nodeos bash -c "cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"
docker exec -it nodeos bash -c "cleos create account eosio alice EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"
docker exec -it nodeos bash -c "cleos create account eosio bob EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV"

五、部署智能合约

5.1 部署eosio.token合约

docker exec -it nodeos bash -c "cleos set contract eosio.token /contracts/eosio.token --abi eosio.token.abi -p eosio.token@active"

5.2 创建和发行代币

docker exec -it nodeos bash -c "cleos push action eosio.token create '[ \"eosio\", \"1000000000.0000 SYS\" ]' -p eosio.token@active"
docker exec -it nodeos bash -c "cleos push action eosio.token issue '[ \"alice\", \"1000.0000 SYS\", \"memo\" ]' -p eosio@active"

5.3 转账测试

docker exec -it nodeos bash -c "cleos push action eosio.token transfer '[ \"alice\", \"bob\", \"100.0000 SYS\", \"memo\" ]' -p alice@active"

六、开发工作流优化

6.1 自动化脚本

创建scripts/init_chain.sh

#!/bin/bash

# 创建钱包
cleos wallet create --to-console > wallet.txt
cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

# 创建系统账户
cleos create account eosio eosio.token EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio alice EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
cleos create account eosio bob EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV

# 部署合约
cleos set contract eosio.token /contracts/eosio.token --abi eosio.token.abi -p eosio.token@active

# 创建和发行代币
cleos push action eosio.token create '[ "eosio", "1000000000.0000 SYS" ]' -p eosio.token@active
cleos push action eosio.token issue '[ "alice", "1000.0000 SYS", "memo" ]' -p eosio@active

6.2 使用Makefile管理常用命令

.PHONY: start stop restart clean init

start:
	docker-compose up -d

stop:
	docker-compose down

restart: stop start

clean:
	docker-compose down -v
	rm -rf data/* wallet/*

init:
	docker exec -it nodeos bash -c "/mnt/dev/scripts/init_chain.sh"

七、高级配置选项

7.1 添加历史插件

修改config.ini

plugin = eosio::history_plugin
plugin = eosio::history_api_plugin

filter-on = *
history-endpoint = 0.0.0.0:8080

7.2 配置MongoDB支持

# 在docker-compose.yml中添加
mongodb:
  image: mongo:4.4
  container_name: mongodb
  ports:
    - "27017:27017"
  volumes:
    - ./mongodb_data:/data/db

# 修改nodeos配置
nodeos:
  environment:
    - EOSIO_MONGODB_URI=mongodb://mongodb:27017/eosmain
  depends_on:
    - mongodb

7.3 多节点配置

# 添加生产者节点
producer1:
  image: eosio/eos:v2.1.0
  command: nodeos -e -p producer1 --plugin eosio::chain_api_plugin --plugin eosio::producer_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:8889 --p2p-listen-endpoint=0.0.0.0:9877 --p2p-peer-address=nodeos:9876
  ports:
    - "8889:8889"
    - "9877:9877"
  volumes:
    - ./data_producer1:/mnt/dev/data
    - ./config_producer1:/mnt/dev/config

八、调试与故障排除

8.1 常见问题解决

  1. 区块不同步

    • 检查节点日志中的错误信息
    • 验证P2P连接是否正确配置
    • 确保所有节点使用相同的创世块
  2. 合约部署失败

    • 检查ABI文件是否匹配
    • 验证账户权限
    • 查看nodeos日志获取详细错误
  3. API访问问题

    • 确认HTTP插件已启用
    • 检查CORS配置
    • 验证端口映射是否正确

8.2 日志分析技巧

# 查看实时日志
docker logs -f nodeos

# 过滤特定日志
docker logs nodeos | grep "produced block"

# 查看错误日志
docker logs nodeos | grep -i error

九、性能优化建议

9.1 资源分配

# 在docker-compose.yml中配置资源限制
nodeos:
  deploy:
    resources:
      limits:
        cpus: '2'
        memory: 8G
      reservations:
        memory: 4G

9.2 数据库优化

# config.ini中调整数据库参数
chain-state-db-size-mb = 4096
reversible-blocks-db-size-mb = 1024

9.3 网络优化

# 调整网络参数
net-threads = 4
sync-fetch-span = 100

十、持续集成与部署

10.1 集成测试框架

# .gitlab-ci.yml示例
stages:
  - test
  - deploy

eos_test:
  stage: test
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker-compose up -d
    - docker exec nodeos /mnt/dev/scripts/run_tests.sh

deploy_testnet:
  stage: deploy
  only:
    - master
  script:
    - docker-compose -f docker-compose.prod.yml up -d

10.2 监控方案

# 添加Prometheus和Grafana
monitoring:
  image: prom/prometheus
  ports:
    - "9090:9090"
  volumes:
    - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml

grafana:
  image: grafana/grafana
  ports:
    - "3000:3000"
  volumes:
    - ./monitoring/grafana:/var/lib/grafana

结语

通过本文的指导,您已经成功使用Docker和Docker Compose搭建了完整的EOS本地测试网络环境。这种容器化的方法不仅简化了部署流程,还提高了开发环境的可移植性和一致性。

在实际开发中,您可以根据项目需求进一步扩展此基础架构,例如添加更多节点、集成CI/CD管道或实现自动化测试。EOS区块链开发虽然有一定的学习曲线,但通过本地测试网络的实践,您将能够更快地掌握核心概念和开发技巧。

建议定期备份钱包和重要数据,并关注EOSIO官方文档获取最新更新和安全建议。祝您在EOS区块链开发之旅中取得成功! “`

推荐阅读:
  1. Dockerfile和docker-compose应用
  2. docker-compose命令介绍和使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker

上一篇:在RK3399开发板香橙派Orange Pi 4B上怎么使用docker

下一篇:Django中的unittest应用是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》