利用实验室服务器跑实验的时候,通常就是两种方案,一个是向日葵远程桌面进行操作,一个是通过ssh进行连接,用ssh的话,一般服务器都在内网(例如校园网),是无法在公网(不在校园网内)直接通过服务器ip进行ssh连接的,这里就可以使用内网穿透,将服务器的ip暴露在公网上,这样在家也能跑实验啦~
但是!ssh内网穿透上存在被别人恶意攻击的可能性!而且,实验室多人使用同一台服务器,都用ssh去连接,每个人每个项目可能又是不同的环境配置,那这时候怎么办呢,能不能将每个人的环境隔离开来呢🤔
当然是Docker啦~刚好最近在配置实验室的系统隔离,也是记录一下配置的流程。
首先摆出我们的系统配置
Ubuntu24.04
Amd64架构
校园网内网环境
安装docker
更新软件源
sudo apt update
安装基本软件
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common lrzsz -y
指定使用阿里云镜像
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新软件源
sudo apt update
安装docker-ce
sudo apt-get install docker-ce -y
查看docker版本
上述步骤已经完成了docker的安装,可以通过如下命令查看docker版本
docker version

配置可用镜像源
创建文件daemon.json
cd /etc/docker
sudo touch daemon.json
sudo vim daemon.json
把下面内容复制进daemon.json中
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}

重启docker
systemctl daemon-reload
systemctl restart docker
创建容器
下载镜像
其中cuda版本根据nvidia-smi
去https://hub.docker.com/r/nvidia/cuda/tags?page=2\&name=11.3 搜索对应版本下载
docker pull nvidia/cuda:11.8.0-devel-ubuntu22.04


docker images 查看
使用docker images
可以查看是否pull成功,看到类似图中框起来的就是配置好镜像了,接下来就是把镜像跑起来(你可以简单理解为镜像就是一个系统)

docker容器实例创建
创建一个docker容器,以增加里面的配置,使其后面能够通过ssh连入这个docker容器
vb
`docker run -i -t nvidia/cuda:11.8.0-devel-ubuntu22.04<对应上图> /bin/bash`
这样之后就会进入 docker 容器的终端,在容器实例里面执行下列指令
apt-get update
apt-get install openssh-server # 安装sshd which sshd
创建权限分离目录
mkdir /var/run/sshd
设置密码,后续远程连接使用
passwd
修改ssh配置文件,设置为允许root远程登录
apt-get install vim #安装vim
vim /etc/ssh/sshd_config
将PermitRootLogin prohibie-password 修改为:PermitRootLogin yes 即可。若没有则加上PermitRootLogin yes

apt-get install inetutils-ping #安装网络工具,后续ping网络(可不装)
最后退出
exit
将容器打包成镜像
docker ps -a
找到刚刚新建但退出的容器

通过container id将容器打包成镜像:
docker commit 109f927221f4 cuda11.8:ubuntu24.04 <对应上图>
启动容器实例服务
启动容器,将宿主机的40902端口映射到docker容器的22端口(22端口就是ssh要连接的端口)
docker run -d -p 40902:22 -v /mnt/docker-user-ssh/pshawn-data:/mnt --privileged=true --name student01 --restart=always --gpus all cuda11.8:ubuntu24.04 /usr/sbin/sshd -D
本地ssh连接
通过ssh ip+port进行连接啦,密码是我们在docker容器实例中设置的,用户默认是root。
ssh root@ip<本地是127.0.0.1> -p 40902<上边设置的端口号>

创建多个容器
为每个用户创建新的容器实例。您可以重复执行类似的命令来启动新的容器,但请注意为每个容器指定不同的名称
和端口映射
,以避免冲突。以下是创建新容器的示例命令:
docker run -d -p 40902:22 -v /mnt/docker-user-ssh/pshawn-data:/mnt --privileged=true --name student01 --restart=always --gpus all cuda11.8:ubuntu24.04 /usr/sbin/sshd -D
进入容器终端
docker exec -it <container_name> /bin/bash
参考博客: