利用實驗室服務器跑實驗的時候,通常就是兩種方案,一個是向日葵遠程桌面進行操作,一個是通過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容器
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
參考博客:
linux服務器通過docker容器實現多用戶環境隔離_docker多用戶權限隔離-CSDN博客