btc全节点Docker容器部署
<h1>Docker容器部署btc全节点</h1>
<h2>相关文档</h2>
<p><code>https://hub.docker.com/r/wwcr/bitcoin-core/~/dockerfile/, https://blog.csdn.net/yzpbright/article/details/81004202 </code></p>
<h3>docker安装</h3>
<ul>
<li>下载docker.dmg文件,然后点击,一步步操作(mac下)</li>
<li>执行docker version,查看是否安装成功</li>
</ul>
<h2>操作流程</h2>
<ol>
<li>新建文件Dockerfile和bitcoin.conf(已上传到gitlab),以构建镜像
Dockerfile:
<pre><code>FROM buildpack-deps:stretch-curl
ENV BITCOIN_VERSION 0.17.0
ENV BITCOIN_DOWNLOAD_PATH https://bitcoincore.org/bin/bitcoin-core-${BITCOIN_VERSION}/
ENV BITCOIN_DOWNLOAD_FILENAME bitcoin-${BITCOIN_VERSION}-x86_64-linux-gnu.tar.gz
ENV BITCOIN_RELEASES_KEY 01EA5486DE18A882D4C2684590C8019E36C2E964
RUN wget $BITCOIN_DOWNLOAD_PATH/$BITCOIN_DOWNLOAD_FILENAME \
&& wget $BITCOIN_DOWNLOAD_PATH/SHA256SUMS.asc \
&& wget https://bitcoin.org/laanwj-releases.asc \
&& gpg --import laanwj-releases.asc \
&& gpg --fingerprint $BITCOIN_RELEASES_KEY \
&& gpg --verify SHA256SUMS.asc \
&& grep -o "$(sha256sum $BITCOIN_DOWNLOAD_FILENAME)" SHA256SUMS.asc \
&& tar -xzvf $BITCOIN_DOWNLOAD_FILENAME \
&& cd bitcoin-*/bin \
&& mv bitcoin-cli bitcoin-tx bitcoind /usr/local/bin
FROM debian:9-slim
COPY --from=0 /usr/local/bin/* /usr/local/bin/
EXPOSE 8333 8332
VOLUME /root/.bitcoin
RUN mkdir conf
COPY bitcoin.conf /conf
CMD ["bitcoind", "--conf=/conf/bitcoin.conf","-printtoconsole", "-disablewallet"]</code></pre>
<hr /></li>
</ol>
<p>bitcoin.conf:</p>
<pre><code>server=1
whitelist=127.0.0.1
txindex=1
addressindex=1
timestampindex=1
spentindex=1
zmqpubrawtx=tcp://127.0.0.1:28332
zmqpubhashblock=tcp://127.0.0.1:28332
rpcallowip=127.0.0.1
rpcuser=bitcoin
rpcpassword=local321
uacomment=bitcore</code></pre>
<hr />
<ol>
<li>使用命令:docker build -t btc_docker:dev ./,构建镜像</li>
<li>执行docker images查看生成的镜像</li>
<li>启动镜像:
<pre><code>全节点模式:docker run -it -v /Users/admin/Desktop/docker-build/btc_blockdata:/root/.bitcoin -p 8332:8332 btc_docker:dev</code></pre>
<p>参数说明:</p>
<ul>
<li>-p 8332:8332-映射端口</li>
<li>-v /Users/admin/Desktop/docker-build/btc_blockdata 指定挂载出来的区块数据存储目录,可自定义</li>
</ul></li>
<li>容器启动后,可执行docker exec -it 87fadc0249a9 /bin/bash #进入容器</li>
<li>执行bitcoin-cli --conf=/conf/bitcoin.conf getblockchaininfo
<h2>搭建测试私有链</h2>
<h3>参考链接</h3>
<p><code>https://blog.csdn.net/yzpbright/article/details/81004202</code></p>
<h3>操作流程</h3>
<ul>
<li>拉取比特币测试网络(bitcoin-testnet)的Docker镜像 :sudo docker pull freewil/bitcoin-testnet-box</li>
<li>运行Docker镜像 docker run -t -i -p 19001:19001 -p 19011:19011 freewil/bitcoin-testnet-box</li>
<li>进入Docker运行环境后,输入make start命令来启动两个比特币节点,组成比特币测试网络</li>
<li>模拟运行两个比特币测试钱包节点,组成一个私有范围的比特币测试网络。输入make getinfo可以查看测试网络节点状态信息
<h2>代码连接示例(node.js)</h2>
<p>bitcore-node.js:</p>
<pre><code>var bitcore = require('bitcore-node');
var Bitcoin = bitcore.services.Bitcoin;
var node = new bitcore.Node({
network: 'livenet',
services:[
{
name: 'bitcoind',
module: Bitcoin,
config: {
connect: [{
"rpchost": "127.0.0.1",
"rpcport": 8332,
"rpcuser":"bitcoin",
"rpcpassword": "local321",//与bitcoin.conf中配置一致
"zmqpubrawtx": "tcp://127.0.0.1:28332"
}]
}
}
]
});
module.exports = node;</code></pre>
<p>bitcore-node.js:</p>
<pre><code>const lib = require('bitcore-lib');
const node = require("../lib/bitcore-node");
const async = require("async");
exports.getBalance = function(req, res) {//查询余额
var address = req.params.address;
var testnet = req.query.testnet;
if (testnet) {
if (!lib.Address.isValid(address, 'testnet')) {
res.status(400).json({"error":"address isn't a valid testnet's address"});
return;
}
} else {
if (!lib.Address.isValid(address, 'livenet')) {
res.status(400).json({"error":"address isn't a valid livenet's address"});
return;
}
}
node.services.bitcoind.getAddressBalance(address, {}, (err, balance) => {
if (err) {
res.status(400).json({"error": err.toString()});
return;
}
res.json({"address":address, "balance":balance.balance.toString()});
});
}</code></pre>
<h5></h5></li>
</ul></li>
</ol>