type
status
date
slug
summary
tags
category
icon
password
WSL及Docker安装
WSL2安装
WSL(Windows Subsystem for Linux)是微软开发的一项技术,允许用户在 Windows 系统中直接运行完整的 Linux 环境,无需虚拟机。WSL2 是 WSL 的升级版本,提供了更高的性能和完全的系统调用兼容性。
首先打开 Windows
控制面板 - 程序 - 程序和功能 - 启用或关闭 Windows 功能,勾选 打开Hyper-V、适用于 Linux 的 Windows 子系统、虚拟机平台 三个子功能。更新成功后重启电脑确保所有更改生效。以管理员的身份打开 Windows PowerShell,并在终端输入
wsl --update。进度条拉满后输入wsl –-install(这一步可能要翻墙,-d参数指定版本,默认是Ubuntu),等待安装完成后填写用户名和密码(密码屏幕不显示),然后再次重启电脑。再次启动 WSL 时,只需要在终端内键入 wsl 即可。如果 Linux 文件系统不想安装在 C 盘,可以从 网址 下载所需发行版的 .tar.gz 文件。
假设 .tar.gz 文件位于 D:\\Ubuntu 文件夹下,并且你希望将其导入到 D:\\Ubuntu\\Ubuntu-20.04 路径下,运行:
执行后,WSL 会将
ubuntu-20.04.tar.gz 导入到 D:\\Ubuntu\\MyUbuntu 文件夹,并创建该路径下的 Linux 文件系统。可以使用 wsl --set-default MyUbuntu 将新的发行版设置为默认。** WSL 安装完成后记得使用
wsl -l -v 确保 Ubuntu 发行版已更新为 WSL2。首次创建账户成功后可以使用命令
sudo apt update && sudo apt upgrade -y 更新软件源并升级所有包;并使用命令 sudo apt install -y git curl wget vim 安装开发常用基础工具。MobaXterm 提供了对 WSL 的直接支持,无需复杂配置。打开 MobaXterm,点击顶部工具栏的 "Session" 按钮,在弹出的对话框中选择 "WSL"(在右侧的选项中),点击 OK,MobaXterm 将打开对应的 WSL 终端。
WSL 科学上网(clash)
Windows 搜索
WSL Settings,打开后选择左侧 网络 选项卡,将 网络模式 改为 Mirrored。勾选 clash 允许局域网,查看端口号(默认是 7890)。然后在 cmd 中使用命令 ipconfig 查看以太网适配器 vEthernet (WSL (Hyper-V firewall)) 的 IPv4 地址(一般是以 172 开头,例如:172.31.0.1)。检查 Clash 配置文件,将DNS 监听地址(例如:127.0.0.1:53)改为监听所有接口(0.0.0.0:53),以便允许 WSL 通过宿主机 IP 访问。
在 WSL 的 Shell 配置文件(如 ~/.bashrc)中添加代理设置:
运行以下命令,即可临时禁用代理环境变量:
Docker 安装
Docker 是一种流行的容器化平台,它能够简化应用程序的部署和管理。本节将介绍在 Ubuntu 操作系统上安装 Docker 的步骤,以便我们可以开始使用 Docker 来构建和运行容器化应用程序。
安装前的准备工作
如果 Ubuntu 自带 Docker,或者此前安装过低版本的 Docker,可以使用下列命令卸载:
执行以下命令来安装 Docker 依赖:
执行以下命令来添加 Docker 阿里镜像的 GPG 密钥:
然后添加阿里的 apt 源:
然后更新源:
安装 Docker
使用下列命令安装最新版本的 Docker:
安装完成后,使用
sudo docker version 命令查看 Docker 版本,sudo systemctl status docker 命令查看 Docker 运行状态。然后安装 Docker 命令补全工具:
当我们安装好了 Docker 之后,需要在 docker 命令前加上 sudo 来执行 docker 命令,例如
sudo docker ps。或者先使用 sudo -i 切换至 root 用户,再执行 docker 命令。如果是在集群上,需要将用户添加到 Docker 用户组,使其无需 sudo 即可运行 Docker 命令:
最后,我们需要在配置文件中增加国的可用的 Docker hub 镜像。使用
sudo vim /etc/docker/daemon.json 命令编辑配置文件如下:然后重启 Docker 服务:
使用
docker info 查看 Docker 信息。使用 docker info | grep -A3 "Registry Mirrors" 查看镜像是否配置成功。搜索 Docker 镜像
我们可以从叫做 Docker hub 的 Docker 官方库获得镜像,或者我们也可以制作自己的镜像。
使用
docker search 命令搜索 Docker 镜像,例如:下载 Docker 镜像
使用
docker pull 命令下载 Docker 镜像,例如:所有已下载的 Docker 镜像都保存在
/var/lib/docker 路径下。使用 docker images 命令查看所有已下载的 Docker 镜像,输出如下:运行 Docker 容器
基于 Docker 镜像的标签(TAG)或者 ID(Image ID),我们可以使用
docker run 命令创建并启动指定一个新的容器,例如:启动容器后,会自动进入容器的 shell(命令行)。
在容器中,可以使用
exit 命令终止容器的运行并脱离。或者按住 CTRL + P 然后 CTRL + Q 脱离但不关闭容器。脱离后,使用 docker ps -a 命令可以看到当前容器仍在运行(Up)。当一个新容器被创建后,会自动分配一个唯一的 ID 和 Name。注意,容器 ID 和 Docker 镜像 ID 是不同的。我们可以使用
docker attach 命令连接到正在运行的容器:同样按住
CTRL + P 然后 CTRL + Q 从容器脱离。使用下面的命令从 Docker 的主机系统中终止正在运行的容器:
如果需要启动一个已停止的容器(不创建新容器),使用
docker start 命令。构建自定义 Docker 镜像
我们可以创建自定义的 Docker 镜像,避免不同系统、软件间的环境冲突。
Dockerfile 构建镜像(以 Ovito 为例)
通过文本文件(Dockerfile)定义镜像的构建步骤,包括基础镜像、依赖安装、文件复制、环境变量配置等。在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:
CMD 类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:CMD在docker run 时运行(如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。)。
RUN是在 docker build 时运行。
Dockerfile 的指令每执行一次都会在 docker 上新建一层,而过多无意义的层,会造成镜像膨胀过大。因此,推荐使用
&& 符号连接命令,减少创建镜像层数。在 Dockerfile 文件的存放目录下,执行构建命令:
直接构建自定义镜像(以 QMCPACK 为例)
首先
docker pull ghcr.io/qmcpack/ubuntu22-openmpi:latest 拉取镜像,使用 docker images 获取镜像 ID。启动名为 qmcpack-4.1.0 的临时容器:克隆 QMCPACK 源代码:
或者上传下载到本地的 QMCPACK 源代码并解压:
编译 QMCPACK
测试 QMCPACK是否编译成功:
按住
CTRL + P 然后 CTRL + Q 脱离容器,使用命令 docker commit qmcpack-4.1.0 qmcpack:v4.1.0 重建镜像。然后 docker save -o qmcpack-4.1.0.tar qmcpack:v4.1.0 保存镜像为 .tar 文件。注意,镜像名称需与重建的镜像一致,生成的 qmcpack-4.1.0.tar 文件即为镜像归档文件。删除镜像命令是 docker rmi [镜像 ID]。通过 apptainer 在计算节点上配置(以 QMCPACK 为例)
上传
.tar 文件到集群,并修改权限:通过 Apptainer 将其转换为
.sif 镜像:由于已通过 Docker 编译 QMCPACK 并固化到镜像中,因此无需挂载。直接运行
apptainer exec qmcpack.sif qmcpack <参数> 即可。- 作者:wangchr1617
- 链接:https://www.wangchr1617.top/log/wsl_docker-1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

