EOS Developing: 构建 docker 镜像的正确方式
本教程基于 dawn-2.x
因为 dawn-2.x 是最稳定的版本,不会变来变去。
为何会有这篇教程? 因为官方仓库里的教程随着代码更新已经过时了,遗留了很多错误。
首先 clone eos 仓库到本地
git clone -b dawn-2.x --depth 1 https://github.com/EOSIO/eos.git --recursive
修改 Dockerfile
cd eos/Docker
cp Dockerfile Dockerfile.bak
vim Dockerfile
如果只是简单地构建一个正确的镜像
从 75 行开始,用下面的代码替代:
RUN git clone -b dawn-2.x --depth 1 https://github.com/EOSIO/eos.git --recursive \
&& cd eos \
&& cmake -H. -B"/tmp/build" -GNinja -DCMAKE_BUILD_TYPE=Release -DWASM_LLVM_CONFIG=/opt/wasm/bin/llvm-config -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_C_COMPILER=clang -DCMAKE_INSTALL_PREFIX=/opt/eos -DSecp256k1_ROOT_DIR=/usr/local \
&& cmake --build /tmp/build --target install
FROM ubuntu:16.04
LABEL author="Xiaobo Tian <peterwillcn@gmail.com>" \
maintainer="Huang-Ming Huang <huangh@objectcomputing.com>" \
version="0.2.1" \
description="This is an eosio/eos image"
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install openssl && rm -rf /var/lib/apt/lists/*
COPY --from=builder /usr/local/lib/* /usr/local/lib/
COPY --from=builder /tmp/build/install/bin /opt/eos/bin
COPY --from=builder /tmp/build/contracts /contracts
COPY --from=builder /eos/Docker/config.ini /eos/genesis.json /
COPY start_eosd.sh /opt/eos/bin/start_eosd.sh
RUN chmod +x /opt/eos/bin/start_eosd.sh
ENV LD_LIBRARY_PATH /usr/local/lib
VOLUME /opt/eos/bin/data-dir
ENV PATH /opt/eos/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
或者直接下载我替换好的文件: learn_eos/correct.Dockerfile at master · panyanyany/learn_eos · GitHub
** 记得要覆盖掉 Dockerfile
哦!
如果想构建一个强大的,可以用来编译合约的镜像
从 75 行开始,用下面的代码替代:
RUN git clone -b dawn-2.x --depth 1 https://github.com/EOSIO/eos.git --recursive \
&& cd eos \
&& cmake -H. -B"/tmp/build" -GNinja -DCMAKE_BUILD_TYPE=Release -DWASM_LLVM_CONFIG=/opt/wasm/bin/llvm-config -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_C_COMPILER=clang -DCMAKE_INSTALL_PREFIX=/opt/eos -DSecp256k1_ROOT_DIR=/usr/local \
&& cmake --build /tmp/build --target install
# FROM ubuntu:16.04
LABEL author="Xiaobo Tian <peterwillcn@gmail.com>" \
maintainer="Huang-Ming Huang <huangh@objectcomputing.com>" \
version="0.2.1" \
description="This is an eosio/eos image"
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install openssl && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y vim
RUN mkdir -p /opt/eos/bin && \
cp -rp /tmp/build/install/bin /opt/eos && \
cp -rp /tmp/build/contracts /contracts && \
cp -rp /eos/Docker/config.ini / && \
cp -rp /eos/genesis.json /
COPY start_eosd.sh /opt/eos/bin/start_eosd.sh
RUN chmod +x /opt/eos/bin/start_eosd.sh
RUN sed -i.bak 's/-I $filePath/-I $filePath -I $filePath\/../g' /opt/eos/bin/eoscpp
ENV LD_LIBRARY_PATH /usr/local/lib
VOLUME /opt/eos/bin/data-dir
ENV PATH /opt/eos/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
或者下载我修改好的文件: https://github.com/panyanyany/learn_eos/blob/master/dawn-2.x/Docker/full.Dockerfile
** 记得要覆盖掉 Dockerfile
哦!
构建 docker 镜像
docker build . -t eosio/eos-dawn-2.x-fullfix
以 docker 服务运行
首先用 learn_eos/docker-compose.yml at master · panyanyany/learn_eos · GitHub覆盖 docker-compose.yml
然后打开2个终端窗口
启动 docker 服务:
### In terminal #1
cd eos/Docker
docker-compose up
检查 eosc
命令是否正常:
### In terminal #2
cd eos/Docker
alias eosc='docker-compose exec walletd eosc -H eosd'
eosc get info
结果示例:
{
"server_version": "8746d320",
"head_block_num": 9,
"last_irreversible_block_num": 0,
"head_block_id": "00000009eb010cefe6d3853465a0f1fdcc24d1c03a00794f4183b1a3d279990e",
"head_block_time": "2018-02-13T04:25:20",
"head_block_producer": "initj",
"recent_slots": "1111111111111111111111111111111111111111111111111111111111111111",
"participation_rate": "1.00000000000000000"
}
检查钱包是否可用:
### In terminal #2
eosc wallet create
结果示例:
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"<--- This is your wallet password --->"
现在你可以根据官方教程来创建帐户和导入钱包了 Tutorials · EOSIO/eos Wiki · GitHub
接下来是广告时间:
Telegram 小组:EOS技术爱好者
我的 Steemit:@pyy
我的简书:http://www.jianshu.com/u/0708f50bcf26
我的知乎:https://www.zhihu.com/people/never-younger
我的公众号:OutOfRange
Congratulations @pyy! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of upvotes
Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP