接上篇,上一篇安装VirtualBox并新建了一个虚拟机,环境为Ubuntu22.04。本篇介绍如何安装配置docker并下载互联网模拟器SEED,并附有一个例子。
安装docker
- 彻底删除可能的已有的docker
sudo apt-get remove docker docker-engine docker.io containerd runc
- 设置 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
- 安装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常用别名设置
由于docker的命令都过于的长,用起来十分不方便,所以可以设置一下别名。
- 使用
vim ~/.bashrc
命令打开文件,检查是否含有以下代码:
一般都有,如果没有,请自行加上。
- 使用命令
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
下载互联网模拟器
- 网址:https://github.com/seed-labs/seed-emulator
- 然后解压下载的文件就可以使用了。
例子
以模拟器给的第一个例子A00-simple-peering为例,位置为seed-emulator-master/examples/A00-simple-peering。
- 设置PYTHONPATH环境变量(在解压后的文件夹seed-emulator-master下中运行source命令)
source development.env
如果你想要用python文件生成output文件夹,是必须要执行这一步的。
- 在A00-simple-peering目录下执行以下命令,生成output文件夹
python3 ./simple-peering.py
- 进入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成功界面如下:
- 运行容器
dcup
- 进入seed-emulator-master/client文件夹,使用
dcbuild
命令构建镜像
- 使用
dcup
命令运行容器
- 打开浏览器,访问http://127.0.0.1:8080/map.html,页面如下
图片就类似这个意思,A00实例的图片找不到了,这个是自己的实验的图片。(我觉得这个真的好好玩,Q弹的)
- 正确关闭docker
先在client文件夹下的终端输入dcdown
命令或者使用ctrl+C
快捷键。
然后在output文件夹下输入dcdown
命令或者使用ctrl+C
快捷键。
注意:顺序不可以错!!一定要关干净了,否则下次dcup的时候可能会报错!
补充一个dcup报错小技巧,如果dcup报错,可以试着dcdown一下,因为可能是节点之前没有释放干净。
参考资料:
- docker官网:https://docs.docker.com/engine/install/ubuntu/
- build报错authorization failed解决办法:https://stackoverflow.com/questions/64221861/an-error-failed-to-solve-with-frontend-dockerfile-v0/66695181#66695181
如果您对以上内容有任何建议,欢迎您私信我。
如果您解决了我在dcbuild那里遇到的问题,请您告诉我,非常感谢。