接上篇,上一篇安装VirtualBox并新建了一个虚拟机,环境为Ubuntu22.04。本篇介绍如何安装配置docker并下载互联网模拟器SEED,并附有一个例子。

安装docker
  1. 彻底删除可能的已有的docker
sudo apt-get remove docker docker-engine docker.io containerd runc
  1. 设置 Docker 仓库

在首次安装docker engine之前,需要先设置docker仓库,否则会报错没有可安装候选。

更新apt包索引并安装包,以允许apt通过HTTPS使用存储库:

sudo apt-get update

 sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

添加Docker的官方GPG密钥:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

注:如果出现了以下报错,可能是因为墙的问题,连接不上外网。

curl: (28) Connection timed out after 300003 milliseconds
gpg: 找不到有效的 OpenPGP 数据。

我当时用了个很玄学的方法解决的,不一定适用所有情况。我当时打开了浏览器,访问了Github,在艰难的访问GitHub的时候,从终端上执行出现报错的命令,然后就成功了。

添加密钥后,使用如下命令设置存储库:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装docker engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

注:1. 旧版的docker还需要另外安装docker-compose,但是最新的安装方法在这一步同时安装了docker-compose,不需要再另外安装。
2. 如果你出现了无法连接到网站的报错,可以使用步骤2的那个方法试试,我是这样成功的,Github和docker双赢。

4. 验证docker是否安装成功

sudo docker run hello-world

若是出现以下代码,则证明安装成功。

docker Android虚拟化 安装镜像 docker安装android模拟器_bash

docker常用别名设置

由于docker的命令都过于的长,用起来十分不方便,所以可以设置一下别名。

  1. 使用vim ~/.bashrc命令打开文件,检查是否含有以下代码:

一般都有,如果没有,请自行加上。

  1. 使用命令vim ~/.bash_aliases打开/新建文件,输入以下代码
# For docker
alias dcbuild='docker compose build'
alias dcup='docker compose up'
alias dcdown='docker compose down'
alias dockps='docker ps --format"{{.ID}}{{.Names}}" | sort -k 2'
docksh(){ docker exec -it $1 /bin/bash; }

然后执行以下命令使设置的别名生效,或者也可以关闭终端重新打开:

source ~/.bash_aliases
给普通用户授权

如果设置好别名直接使用的话,可能会出现如下权限不足的报错:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get “http://%!F(MISSING)var%!F(MISSING)run%!F(MISSING)docker.sock/v1.24/version”: dial unix /var/run/docker.sock: connect: permission denied: driver not connecting

所以要将普通用户加入docker组中,由于组docker在安装docker时会自动添加,所以可以直接执行以下命令将普通用户加入docker组:

sudo gpasswd -a $USER docker
newgrp docker
下载互联网模拟器
  1. 网址:https://github.com/seed-labs/seed-emulator
  2. docker Android虚拟化 安装镜像 docker安装android模拟器_bash_02


  3. 然后解压下载的文件就可以使用了。
例子

以模拟器给的第一个例子A00-simple-peering为例,位置为seed-emulator-master/examples/A00-simple-peering。

  1. 设置PYTHONPATH环境变量(在解压后的文件夹seed-emulator-master下中运行source命令)
source development.env

如果你想要用python文件生成output文件夹,是必须要执行这一步的。

  1. 在A00-simple-peering目录下执行以下命令,生成output文件夹
python3 ./simple-peering.py
  1. 进入output文件夹,使用以下命令构建镜像(注:命令是设置别名后的命令)
dcbuild

如果您同样出现了以下报错

failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

那么您可以试一下下面的两条命令:

export DOCKER_BUILDKIT=0
export COMPOSE_DOCKER_CLI_BUILD=0

如果没有解决,可以参考一下这个链接

如果这两个命令成功了的话,使用以下命令把这两个环境变量设置为永久生效:

目前我的dcbuild遇到了新的如下报错,还未解决。

Status: pull access denied for cfee3a34e9c68ac1d16035a81a926786, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied,

由于我之前的电脑上装的docker是可以正常使用的,所以后面的步骤用的是之前电脑的图。

dcbuild成功界面如下:

docker Android虚拟化 安装镜像 docker安装android模拟器_linux_03

  1. 运行容器
dcup

docker Android虚拟化 安装镜像 docker安装android模拟器_linux_04

  1. 进入seed-emulator-master/client文件夹,使用dcbuild命令构建镜像

docker Android虚拟化 安装镜像 docker安装android模拟器_Docker_05

  1. 使用dcup命令运行容器

docker Android虚拟化 安装镜像 docker安装android模拟器_bash_06

  1. 打开浏览器,访问http://127.0.0.1:8080/map.html,页面如下

docker Android虚拟化 安装镜像 docker安装android模拟器_docker_07

图片就类似这个意思,A00实例的图片找不到了,这个是自己的实验的图片。(我觉得这个真的好好玩,Q弹的)

  1. 正确关闭docker

先在client文件夹下的终端输入dcdown命令或者使用ctrl+C快捷键。

然后在output文件夹下输入dcdown命令或者使用ctrl+C快捷键。

注意:顺序不可以错!!一定要关干净了,否则下次dcup的时候可能会报错!

补充一个dcup报错小技巧,如果dcup报错,可以试着dcdown一下,因为可能是节点之前没有释放干净。


参考资料:

  1. docker官网:https://docs.docker.com/engine/install/ubuntu/
  2. build报错authorization failed解决办法:https://stackoverflow.com/questions/64221861/an-error-failed-to-solve-with-frontend-dockerfile-v0/66695181#66695181

如果您对以上内容有任何建议,欢迎您私信我。
如果您解决了我在dcbuild那里遇到的问题,请您告诉我,非常感谢。