今天的实践完成,就可以和团队的小伙伴一同丝滑地学起区块链了
我们先来回顾一下过去的文章:
首先我们先学习了如何搭建节点:
然后我们学习了控制台的安装与使用:
再然后我们实现了控制台的 Web 化:
但是仅仅将控制台 Web 化还是不够的,因为我们还需要进行导入导出账户、上传下载合约等多种操作。那么,我们有没有办法让用户不用登陆服务器,只在浏览器中就能实现这些操作,然后又保证用户的操作和服务器是安全隔离的呢?
我们可以通过这样的方式实现:基于 Docker 技术在我们的服务器上搭建一个容器(Container),这个容器中是一个轻量的Ubuntu操作系统,然后这个容器挂载了控制台放置合约的 Contracts 文件夹与放置账户的 Accounts 文件夹。最后我们将我们的容器 Web 化,这样我们的区块链云学习环境1.0就算真正搭建好了,可以和团队的小伙伴一起愉快地玩耍了。
安装screen :
apt install screen进入screen:
screen -S install_docker获取get-docker脚本:
curl -fsSL test.docker.com -o get-docker.sh安装docker:
sudo sh get-docker.sh --mirror Aliyundocker换源:
sudo vim /etc/docker/daemon.json写入:
{
  "registry-mirrors" : [
    "http://ovfftd6p.mirror.aliyuncs.com",
    "http://registry.docker-cn.com",
    "http://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "insecure-registries" : [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
  ],
  "debug" : true,
  "experimental" : true
}
重启docker服务:
sudo service docker restart到 console 的目录下:
$ pwd
/Users/liaohua/fisco/console
contracts 文件夹绝对路径:
[console绝对路径]/contractsaccounts 文件夹绝对路径:
[console绝对路径]/account我们之后会通过 ssh 的方式在宿主机和容器间建立连接。
创建ssh keys:
$ ssh-keygen -t rsa -b 4096 -C "你的邮箱地址"在~/.ssh文件夹下会生成id_rsa.pub文件,这个就是我们的公钥。

创建ssh_keys文件夹:
mkdir ssh_keys复制公钥到ssh_keys文件夹:
cp ~/.ssh/id_rsa.pub ~/ssh_keys/authorized_keys获取ssh_keys文件夹的绝对路径。
通过docker pull 命令拉取镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/leeduckgo/blockchain-study:2.1其中,「ssh_keys 文件夹绝对路径」在 1.3 中得到,「accounts 文件夹绝对路径」与「contracts 文件夹绝对路径」在 1.2 中得到。
docker run -d -p 26122:22 -p 8003:80 -v=[ssh_keys 文件夹绝对路径]:/root/.ssh -v=[accounts 文件夹绝对路径]:/root/study_area/accounts -v=[contracts 文件夹绝对路径]:/root/study_area/contracts --name blockchain-study registry.cn-hangzhou.aliyuncs.com/leeduckgo/blockchain-study:2.1 /usr/sbin/sshd -D命令解析:
我们可以通过docker run --help命令查看docker run命令都有哪些参数。
-d:用后台的方式运行容器并打印容器id。
-p:端口映射,:前面是宿主机的端口,后面是容器的端口,如-p 26122:22指的是把容器的22端口(ssh端口)映射到宿主机的26122端口上。
-v:文件夹挂载,:前面是宿主机的文件夹路径,后面是容器的文件夹路径,如-v=/home/ubuntu/ssh_key:/root/.ssh就是把宿主机的/home/ubuntu/ssh_key路径挂载到容器的/root/.ssh路径下。
-name:容器名称。
registry.cn-hangzhou.aliyuncs.com/leeduckgo/blockchain-study:2.1:镜像名称。
/usr/sbin/sshd -D:启动镜像时候执行的命令,这里是开启ssh服务。
执行成功后会返回容器编号:

通过ssh命令连接:
ssh -p 26122 root@localhost
进入 contract 目录:
cd ~/study_area/contracts如果这个文件夹下的内容和console文件夹下的contracts文件夹内容一样,就说明挂载成功了。

accounts 文件夹同理。
和4. 控制台的Web化同理,只是这次我们执行的是ssh命令:
ttyd -p 8081 ssh -p 26122 root@localhost -t "cd /root/study_area;bash --login"
然后我们再按照4. 控制台的Web化中提到的方式加上鉴权即可。
用浏览器访问http://ip:8081
进入合约目录
cd ~/study_area/contracts/soliditygit clone https://github.com/WeLightProject/Contract-Study.git
http://ip:8080部署刚才下载好的合约:
deployByCNS contracts/solidity/Contract-Study/HelloWorld.sol HelloWorld:1.0
http://ip:8081cd ~/study_area/accounts/ecdsacat 0xff1b462499a7759adeb5ff0d37b2f6815ba2d27a.pem
用浏览器访问http://ip:8081
加载刚才录入的账户
loadAccount account/ecdsa/0x2784d6ca6fdb8a96aa924b06978ea5af2d810240.pem
用 vim 在ecdsa目录下新建私钥文件:
vim [地址].pemi命令输入:
-----BEGIN PRIVATE KEY-----
MEcCAQAwEAYHKoZIzj0CAQYFK4EEAAoEMDAuAgEBBCAjKpm08oDC+4UzihRd7oJ5
BNw1v3s4Po1O3ZrbDy1EDKAHBgUrgQQACg==
-----END PRIVATE KEY-----wq保存退出。

下载镜像:
docker pull [镜像名称]创建容器:
docker run [镜像名称]查看当前运行的容器:
docker ps查看所有容器:
docker ps -a查看所有镜像:
docker image ls删除镜像:
docker image rm [镜像id]删除容器:
docker rm [容器id]
 
                如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!