因为docker的ubuntu镜像是没有主进程的,所以通常执行完任务就会退出。要想用同一个容器继续执行其他任务也比较麻烦。或者想把容器中的文件拷贝出来都不那么容易。用下面这个方法可以实现一个接近完美的执行器,而且可以配置各种网络模式,总之比WSL的体验好多了。
基本操作
首先启动一个ubuntu容器,并把启动命令设置为bash。可以把自己的工作目录挂载进容器,免得跨容器拷贝文件,注意要用绝对路径,其中的区别请查询docker文档。
docker run -it --name=runner -v C:\Users\laotie\workspace:/data ubuntu:latest bash
然后就可以做各种事情了,比如 apt update,完事输入exit退出即可。这个时候容器是Exited状态。
下次需要使用的时候执行以下命令:
docker start -ai runner
如此即可恢复执行器的终端。
其他可选操作
# 更新软件源为国内163源 sed -i 's/\/\w\+.ubuntu.com/\/mirrors.163.com/gi' /etc/apt/sources.list # 最新版的ubuntu的源配置变更了位置,需要用下面的方法 sed -i 's/\/\w\+.ubuntu.com/\/mirrors.163.com/gi' /etc/apt/sources.list.d/ubuntu.sources # 网络相关的工具 apt install -y curl iputils-ping dnsutils openssh-client git
集成到Terminal应用
先写一个bat脚本,用于启动容器并打开一个bash终端。内容如下,保存在C:\Users\laotie\ubuntu-runner.bat
docker start runner docker exec -it runner bash
在左侧的Profiles的位置,点击最下面的Add a new profile,新增一个配置项。
输入喜欢的名称(Name),命令行(Command line)输入:C:\Users\laotie\ubuntu-runner.bat
,如下图所示。
在图标(Icon)的位置输入Ubuntu官网的favicon,https://assets.ubuntu.com/v1/49a1a858-favicon-32x32.png