摘要
Docker 环境中主要分为 node 容器和 miner 容器;
ckb_tools
环境基于 Ruby SDK 提供交互接口;
本文档将会把 Docker 部署中所需要的文件进行分类,存储在主机的 /data/ckb
目录下;
为什么选择 Docker ?
如果你的本地环境无法支持 rust,ruby 等编程语言的运行,或者你希望快速的运行 CKB node 或者 miner 进程进行测试,那么 Docker 将是最好的选择,在 container 和 vm 的性能对比中,container 更接近于原生的资源利用;
安装 DOCKER
Ubuntu
- platform ubuntu 16.04(本文档运行环境基于此平台)
apt install docker-ce -y && service docker start
or
curl -fsSL https://get.docker.com/ | sh && service docker start
windows
更多软件版本安装 DOCKER 参考 : Get Docker | Docker Docs
获取 CKB 镜像
docker pull nervos/ckb:latest
初始化 CKB 配置文件
创建 CKB 节点配置文件目录
mkdir -p /data/ckb/conf
chmod 777 /data/ckb/conf
创建 CKB 配置文件
docker run --rm -it \
-v "/data/ckb/conf:/var/lib/ckb" \
--net=host \
--name=ckb_init_conf \
nervos/ckb:latest init --spec testnet --force
启动 CKB 节点
修改 node 存储路径
cd /data/ckb/conf
sed -i "s/\"data\"/\"\.\.\/data\"/g" ckb.toml
创建 CKB 节点存储目录
mkdir -p /data/ckb/data
chmod 777 /data/ckb/data
启动节点
docker run -d \
-v "/data/ckb/data:/var/lib/data" \
-v "/data/ckb/conf:/var/lib/ckb" \
--net=host \
--name=ckb_node \
nervos/ckb:latest run
查看容器运行日志信息(正常状态下会出现 testnet 的数据同步信息)
docker logs -f ckb_node
创建 CKB 钱包地址
该示例使用 Docker 部署官方的 Ruby SDK 环境进行演示,如果本地有 Ruby 环境,可直接参考 https://docs.staging.nervos.org/getting-started/interact/#use-api 进行钱包创建
创建 CKB 工具目录
mkdir -p /data/ckb/tools
cd /data/ckb/tools
下载工具运行所需要的依赖文件
git clone https://github.com/bitcoin-core/secp256k1.git
git clone https://github.com/nervosnetwork/ckb-sdk-ruby
wget https://github.com/jedisct1/libsodium/releases/download/1.0.16/libsodium-1.0.16.tar.gz
编写 Dockerfile
vim Dockerfile
FROM ruby:latest
WORKDIR /opt
ADD . /packets
RUN cp -R /packets/* . \
&& cd secp256k1 \
&& echo " +++ build secp256k1 " && ./autogen.sh \
&& ./configure && make && make install \
&& echo " +++ install bitcoin-secp256k1 " && gem i bitcoin-secp256k1 \
&& echo " +++ install rbnacl " && gem install rbnacl \
&& cd .. && tar zxf libsodium-1.0.16.tar.gz && cd libsodium-1.0.16 \
&& echo " +++ install libsodium " && ./configure && make -j3 && make install \
&& cd .. && cd ckb-sdk-ruby \
&& echo " +++ install bundler " && gem install bundler \
&& echo " +++ start bundle, need 5 - 10 min. " && bundle
WORKDIR /opt/ckb-sdk-ruby
CMD "./bin/console"
构建 Docker 镜像(编译过程需要一些时间,具体时长由本地网络质量决定)
docker build -t ckb_tools .
通过 ckb_tools
镜像创建并进入 ckb_tx_tool
容器
docker run --rm -it \
--name="ckb_tx_tool" \
ckb_tools
通过容器创建 CKB 钱包
#连接 CKB 节点(该地址填写的私网 IP 为宿主机的网卡 IP,因为节点使用的容器网络为 host 模式)
[1] pry(main)> api = CKB::API.new(host:"http://192.168.0.3:8114")
=> #<API@http://192.168.0.3:8114>
#创建私钥
[2] pry(main)> privkey = "0x" + SecureRandom.hex(32)
=> "0x4612a386e7d9064b20413c85fc5ccdabfb458d4e350621994ffc12ba8e6831a8"
#构建 CKB 钱包信息
[3] pry(main)> wallet = CKB::Wallet.from_hex(api, privkey)
=> #<CKB::Wallet:0x0000557cb65ff4a0
@api=#<API@http://192.168.0.3:8114>,
@key=
#<CKB::Key:0x0000557cb663fa00
@address=#<CKB::Address:0x0000557cb65ff540 @blake160="0x12ffed4637a6a5086ab57ae9b5c8e139f16ce803", @prefix="ckt">,
@privkey="0x4612a386e7d9064b20413c85fc5ccdabfb458d4e350621994ffc12ba8e6831a8",
@pubkey="0x022c309c52fe6ea37570a0e203f88a0afc956b82dc37398687ec2eef157a06a649">>
#打印钱包的配置信息
[5] pry(main)> puts wallet.block_assembler_config
[block_assembler]
code_hash = "0x9e3b3557f11b2b3532ce352bfe8017e9fd11d154c4c7f9b7aaaa1e621b539a08"
args = ["0x12ffed4637a6a5086ab57ae9b5c8e139f16ce803"]
=> nil
#获取 CKB 钱包的地址
[6] pry(main)> wallet.address
=> "ckt1q9gry5zgju0kszjv0nml26whh6kchferqvaxyk29zcd44d"
#退出容器
[7] pry(main)> quit
修改 CKB 节点配置文件,填写创建的 CKB 钱包配置信息
cd /data/ckb/conf
echo '[block_assembler]' >> ckb.toml
echo 'code_hash = "0x9e3b3557f11b2b3532ce352bfe8017e9fd11d154c4c7f9b7aaaa1e621b539a08"' >> ckb.toml
echo 'args = ["0x12ffed4637a6a5086ab57ae9b5c8e139f16ce803"]' >> ckb.toml
重启 CKB 节点容器,应用配置文件
docker restart ckb_node
查看运行 CKB 节点的的容器日志
docker logs ckb_node | tail -n 30
启动 CKB 挖矿进程
修改 miner 存储路径
cd /data/ckb/conf
sed -i "s/\"data\"/\"\.\.\/miner\"/g" ckb-miner.toml
修改 miner 的 node rpc 地址
sed -i "s/0.0.0.0/192.168.0.3/g" ckb-miner.toml
创建 CKB 节点存储目录
mkdir -p /data/ckb/miner
chmod 777 /data/ckb/miner
启动节点
docker run -d \
-v "/data/ckb/miner:/var/lib/miner" \
-v "/data/ckb/conf:/var/lib/ckb" \
--net=host \
--name=ckb_miner \
nervos/ckb:latest miner
查看容器运行日志信息
docker logs -f ckb_miner
更多
最大化资源利用率
每个 miner 进程会占用 1 个核心,所以如果是多核心主机可以通过启动多个 miner 容器实现资源利用率最大化
docker run -d \
-v "/data/ckb/miner:/var/lib/miner" \
-v "/data/ckb/conf:/var/lib/ckb" \
--net=host \
--name=ckb_miner(n) \
nervos/ckb:latest miner
分布式 miner
通过修改 miner 配置文件中的 rpc_url
参数,来指定 node 接口,从而可以在多台主机运行 miner 进程,监听同一个 node
不定时更新 …
感谢您的阅读,如有出入请您不吝提出;