docker load -i centos.tar # 导入centos7 最小化镜像
docker images centos # 查看镜像信息
docker run -it 73 # 开启容器,73是镜像的id前两位
# 以下操作在容器中进行
1、配置yum源
mkdir /etc/yum.repos.d/repo
mv /etc/yum.repos.d/* /etc/yum.repos.d/repo
vim /etc/yum.repos.d/local.repo
[local_yum]
name=CentOS-local yum
baseurl="ftp://192.168.31.112/centos_repo" # 真机yum源
gpgcheck=0
enabled=1
2、安装基础软件包
yum -y install git bzip2 gcc gcc-c++ ntp epel-release
yum -y install automake autoconf libtool make # make工具
yum -y install net-tools # ifconfig工具
yum -y install which # which工具
yum install openssh-clients # scp等工具
3、准备软件包
scp root@192.168.31.112:/srv/* /srv/
cmake-3.15.2.tar.gz
go1.10.2.linux-amd64.tar.gz
node-v11.0.0.tar.gz
go-ethereum-1.8.7.tar.gz
4、安装nodejs
tar -zxvf node-v11.0.0.tar.gz
cd node-v11.0.0
./configure
make
make install
node -v # 检测是否安装成功
npm install -g cnpm --registry=https://registry.npm.taobao.org # 配置npm仓库
5、安装cmake
tar zxvf cmake-3.15.2.tar.gz
mv cmake-3.15.2 /usr/local/
cd /usr/local/cmake-3.15.2
./bootstrap
gmake
gmake install
echo "export PATH=/usr/local/cmake-3.15.2/bin:$PATH" >> /etc/profile
source /etc/profile
cmake -version # 检测cmake是否安装成功
6、安装go语言环境
tar -zxvf go1.10.2.linux-amd64.tar.gz
mv go1.10.2.linux-amd64 /usr/local/
echo "export GOROOT=/usr/local/go" >> /etc/profile
echo "export PATH=/usr/local/go/bin:$PATH" >> /etc/profile
source /etc/profile
go version # 检测go环境是否安装成功
7、安装以太坊
tar -zxvf go-ethereum-1.8.7.tar.gz
mv go-ethereum-1.8.7 /usr/local/go-ethereum
cd /usr/local/go-ethereum
make all
echo "export PATH=$PATH:/usr/local/go-ethereum/build/bin" >> /etc/profile
source /etc/profile
geth version # 检测geth是否安装成功
8、删除软件包
rm -fr /srv/*
# 以下操作在真机上执行
9、将容器保存成镜像
docker ps -qa # 查看容器id,319dc2655041
docker commit 319 centos7:geth #容器保存成镜像,docker commit 容器id 容器名:标签
10、导出镜像
docker images # 查看镜像信息,刚才保存的镜像id为 9e6749e0c33c,镜像名为centos7:geth
docker save 9e6 -o centos7-geth.tar # 使用镜像id导出
或
docker save centos7:geth -o centos7-geth.tar # 使用镜像名:标签导出
# 当容器关闭之后,再次启动容器的时候需要执行source /etc/profile刷新配置文件,并且需要手动打开私有链链
# 需要对容器进行再次修改,通过docker run(docker start、docker attach) 启动容器的时候自动刷新配置文件,自动启动一个测试链
11、使用dockerfile创建镜像
# 这个脚本在刚才已经安装好geth环境的docker容器中定义,镜像id:319dc2655041
vim /usr/bin/startserver.sh
#!/bin/bash
source /etc/profile # 刷新配置文件
geth --datadir dir --dev --rpc --rpcport 8545 --rpcaddr "localhost" console 2>/srv/blocklogdata.log # 启动测试链
chmod 777 /usr/bin/startserver.sh # 设置成可以执行
docker rmi centos7:geth # 删除刚才保存的镜像 (在真机上操作)
docker commit 319 centos7:geth # 重新将容器保存成镜像 (在真机上操作)
# Dockerfile在真机中定义
vim Dockerfile
FROM centos7:geth # 基础镜像,刚才通过容器保存的镜像
EXPOSE 8545 # 开放的端口
CMD [ "/usr/bin/startserver.sh"] # 启动容器时候执行的脚本
docker build -t mygeth:test . # 创建镜像,在Dockerfile目录下执行,得到的镜像id是07a48d5f4efc,镜像名mygeth:test
12、启动镜像
docker run -it -p 8545:8545 07a # 将docker中的8545端口映射到本地8545
netstat -ntupl | grep 8545 # 查看真机上的8545端口
13、导出新的镜像
docker save 07a -o centos7-geth.tar # 使用id导出
或者
docker save mygeth:test -o centos7-geth.tar # 使用 名字:标签 导出
14、使用新的镜像
docker load -i centos7-geth.tar # 导入镜像
docker run -it -p 8545:8545 mygeth:test # 启动容器
希望大家留言指出错误。
部署合约等操作请参考上一篇博客:Centos7安装geth、搭建私有链、部署solidity合约、调用合约函数