Docker 的一些好处
使用 docker
的好处有很多,最大的特点就是你可以拿到一个速度并不算很慢,而且能够随便乱玩的 Linux
系统,而不是在自己的生产环境上乱玩。
这里以 tinyriscv
这个项目为例,解释一下如何通过 docker
来搭建一个自己的实验环境,并保存与迁移。
如果你还没有安装 docker
,请在 这里 这里安装 docker
初级版
这个版本不需要自己手写
Dockerfile
,直接从一个裸的机器开始搭建。
首先,我们通过如下命令下载一个镜像,然后新建一个容器,其名称为实验项目,例如这里的名称为 tinyriscv
这里,我们没有指定 ubuntu
的版本,它默认会拉取最新的镜像版本,如果你的实验项目对版本有要求,那么只需要在冒号后指定版本即可,例如:
注意,这里的代理端口与
ip
地址,在windows
下,我们需要指定为wsl2
的ip
地址及其代理端口,如果想知道如何为wsl2
设置代理,请阅读这篇文章
第一次拉取镜像会去 dockerhub
下载,如下图所示:
如果下载速度较慢的话可以选择挂梯子走系统代理,或者通过镜像加速,方法见此处
随后,我们的工作就是开始下载包,由于我们的指令中指定的网络连接状态为 host
,因此我们不需要为这个容器配置代理。
在项目文档中,有详细的安装指南:
我们的做法就是直接照抄命令,但由于这是一台裸机,我们需要做一些初始化:
使用
docker
不好的一点是对于github
我们无法使用ssh
进行登录,这就意味着我们不能push
代码上去,但依然可以在本地做版本管理,最后一口气提交到仓库中去
对于上面一点的解决方案是,我们可以把代码克隆到本地,然后通过挂载虚拟卷的方式,挂载到容器中,例如如下命令:
关于工具链的下载,可以采用官网的方式
https://github.com/riscv-collab/riscv-gnu-toolchain
如果一定要使用百度云下载,那么可以下载到本地后,使用docker cp
命令复制到容器中,命令为:
例如,把本地的 example
文件夹复制到容器 ID 为 65
开头的那个容器中,其命令为:
docker cp example 65:/root/example
这样,就能够愉快的使用 docker
来运行实验了。
进阶版
初级版需要写命令,很烦人,并且我们的镜像是个裸机,没有什么软件包(几乎是什么都没有),因此我们希望我们能够写一个文件,让它自动帮我们构建出一个符合要求的镜像,这样我们只需要从这个镜像生成容器即可(甚至可以加 --rm
命令让他跑完我们的运行命令就自动删除,直接完成一条命令生成一个容器)
通常,这种文件被称为 Dockerfile
,其命名一般也是 Dockerfile
,但对特定我们需要区分名字的镜像,例如 tir
和 tvm
,我们可以写两个配置文件,命名为 Dockerfile.tir
和 Dockerfile.tvm
。
写完后,我们只需要一行命令即可开始构建:
其中 -f
表示从哪个文件进行构建,-t
表示构建生成的镜像的标签名称
tiny RISC-V
我们来写一个简单的 Dockerfile
来构建 tinyriscv
,如下所示:
随后,我们直接运行构建文件:
然后,通过此镜像构建容器:
如何在容器中写代码
这里介绍一种最简单的方式:VS Code
我们在 VS Code
中安装插件:
随后,在左侧侧边栏找到 Docker
图标,并打开:
然后选择第一个容器,右键,选择 “附加 Visual Studio Code“,然后就可以在容器中使用 VS Code
了
你可以在容器中下载任意你需要的插件(只需要下载必要的语言插件与补全插件即可)