使用 Docker 开发 - Agzs/geth-pbft-study GitHub Wiki
我们可使用 Docker 作为 Windows 下的编译运行环境:工程源代码保存在 Windows 系统中文件夹内,编译运行环境在 Docker 容器(container)内,通过共享文件夹的方式实现在 Windows 系统中编辑源代码,在容器中编译运行项目。
-
在 BIOS 中 Enbale Virtualization。
-
安装 Docker toolbox (win10专业版/企业版/教育版可安装docker for windows,以下步骤适用于docker toolbox,使用docker for windows有些不同请自行修改)。
-
运行 docker quickstart terminal, 由于这个 terminal 不支持粘贴,运行完成配置后关闭即可。
-
第一次运行时,在 cmd 或 powershell 中运行
docker run -it -v /c/Users/xxx/proj/:/root/go/ rkdghd/ubuntu_go:latest bash。此时便可以在 docker container 中进行编译运行操作。- -it 是两个参数:-i 和 -t,-i 表示打开并保持 stdout,-t 表示分配一个终端(pseudo-tty)。
- -v 指定共享文件夹的映射:参数中冒号前的路径是 windows 的文件夹路径,需要改成自己 windows 系统中的路径,把工程代码文件放在相应的目录下, 代码文件夹命名为 src; 冒号后的路径是 docker 容器中文件系统的路径,不需要修改。
- 建议不要把 windows 系统的
$GOPATH路径映射到 docker 容器中,而是另外创建一个新文件夹。 - 注意 docker toolbox 被限制只能访问 C:\Users 下的文件夹,源代码应放在该文件夹下。
-
后续运行时,可以运行已经存在的 container,这样之前在 container 中的操作可以保留。
docker ps -a docker start -i [container_id]
$docker rm <container_id> # 删除容器
$docker rmi <image_id> # 删除镜像
$docker ps # 列出运行中的容器
$docker ps -a # 列出所有容器
$docker images # 列出所有镜像
$docker images -a # 列出所有镜像(包括中间镜像)可在命令后增加 --help 参数查看帮助信息。
-
在 Ubuntu 系统中制作镜像步骤
- 编写 Dockerfile 文件,使用 hub 中已有的 Ubuntu18.04 镜像,Dockerfile 内容如下
# 说明该镜像以哪个镜像作为基础 FROM ubuntu:bionic # 进入容器后的工作目录 WORKDIR /root # 在 build 这个镜像时执行的操作,先更换源,再安装需要的软件 RUN apt update && apt install -y --reinstall ca-certificates \ && echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list \ && echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list \ && echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list \ && echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list \ && apt update && apt install -y gcc g++ make zlib1g-dev libbz2-dev libsnappy-dev git curl \ && curl -SL https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz | tar -xzC /usr/local/ \ && git clone https://github.com/facebook/rocksdb.git && cd rocksdb && git checkout 4.1.fb && make shared_lib \ && rm .git -rf \ && ln -sf /rocksdb/librocksdb.so.4.1.0 /usr/local/lib/librocksdb.so \ && ln -sf /rocksdb/librocksdb.so.4.1.0 /usr/local/lib/librocksdb.so.4 \ && ln -sf /rocksdb/librocksdb.so.4.1.0 /usr/local/lib/librocksdb.so.4.1 \ && ln -sf /rocksdb/librocksdb.so.4.1.0 /usr/local/lib/librocksdb.so.4.1.0 \ && cp include/rocksdb /usr/include/ -r && ldconfig \ && rm /var/cache/apt/archives/* -rf \ && apt purge git -y \ && apt autoremove -y \ && mkdir -p /root/go/bin \ && echo "export GOROOT=/usr/local/go" >> /root/.bashrc \ && echo "export GOPATH=/root/go" >> /root/.bashrc \ && echo "export GOBIN=/root/go/bin" >> /root/.bashrc \ && echo "export PATH=$PATH:/root/go/bin:/usr/local/go/bin" >> /root/.bashrc-
执行
docker build -t ubuntu_go .构建镜像, 其中 -t 设置标签。 -
上传镜像至官方的 Docker hub。
# $docker commit [container_id] [repository]:[tag] ## 用更改后的容器创建新的镜像 $docker login # 登录账户 $docker tag [image_id] [username]/[repository]:[tag] # 为本地的 image 设置标签 $docker push [username]/[repository]:[tag] # 发布 image 文件, 登录 hub.docker.com 可以看到已经发布的 image 文件
可执行
docker run -it -v $HOME/go/:/root/go ubuntu_go:latest bash用刚生成的镜像运行一个容器并启用 bash。 -
待解决问题
- 目前只能运行一个节点,多个节点如何运行尚待解决。