概要
使用跳板机连接服务器,并在服务器中运行docker容器,为了方便调试,用vscode连接到容器。本地机器是wins11,服务器系统是Ubuntu。
一、安装docker
安装docker,nvidia_docker步骤省略,要注意各种命令最好亲手打一遍,不然容易出错。
二、连接服务器
终端连接软件有很多,这里使用的是finalshell。
1、配置跳板机信息
创建一个ssh连接
在隧道中,配置需要跳转的服务器,绑定ip是本机地址不用改。
2、配置目标机器信息
完成上述步骤后,再创建一个新的ssh连接。
全部完成后,先连接跳板机,再连接目标机器,就可以了。
三、创建docker容器
一些常用命令
docker images #查看镜像
docker ps #查看正在运行容器
docker ps -a #查看所有容器
1、拉取镜像
服务器第一次创建容器,先将用户加入用户组,然后拉取官方镜像,根据服务器系统和显卡版本选择。
sudo usermod -aG docker ${USER}
docker pull nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04
2、创建容器
docker run -it --gpus all -v path1:path2 -p 6666:22 --name container_name nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04
- -it:以交互式运行容器
- -v:挂载目录路径,path1是在宿主机路径,path2是容器内的路径
- -p:前一个为宿主机端口,后一个为容器端口,主要用于直连容器
- --name:容器名
- 镜像名或镜像id
- --shm-size=2g:设置共享内存大小
3、运行容器
docker restart 容器名
docker exec -it 容器名 bash
首次进入,安装各种需要软件,如vim,python等
退出容器exit
四、vscode连接容器
1、 容器安装ssh服务
安装ssh服务
apt-get install openssh-server
ssh服务安装完成无问题后,编辑/etc/ssh/sshd_config配置文件
vim etc/ssh/sshd_config
添加允许root用户访问,增加配置如下:
PermitRootLogin yes
PasswdAuthentication yes
配置添加完成后启动sshd服务
/usr/sbin/sshd
或者 service ssh start
在容器内部环境,为root用户添加一个密码
passwd root
设置ssh自启动,在/root/下创建start_ssh.sh文件
vim start_ssh.sh
vim编辑文件内容
#!/bin/bash
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$LOGTIME] startup run..." >>/root/start_ssh.log
service ssh start >>/root/start_ssh.log
给予权限
chmod +x /root/start_ssh.sh
将脚本加到启动文件
vim /root/.bashrc
添加内容,重启即可
# startup run
if [ -f /root/start_ssh.sh ]; then
. /root/start_ssh.sh
fi
2、vscode安装拓展
安装Dev Conitainers,remote-ssh
3、配置config文件
将下列内容输入到config文件中,跳板机不用私钥连接就删掉IdentityFile
Host tbj #跳板机名,任意
HostName xx.xx.xx.xx跳板机ip
User 用户名
Port 端口
IdentityFile ~/.ssh/tbj/id_rsa #跳板机私钥路径
Host 11_12 #目标机器或容器名,任意
HostName xx.x.x.x目标机器ip
User root #容器内用户,一般是root
Port 6666 #容器映射到服务器上的端口,创建容器时-p参数确定
ProxyJump tbj #必须与跳板机名相同
Host
:
:
然后就可以连接到容器了,对容器内代码进行调试。
五、镜像生成与传输
1、从容器生成新镜像
docker commit 容器id abc/123:000 #提交容器为镜像
docker save abc/123:000 -o xxx.tar #将镜像打包为xxx.tar
docker load -i xxx.tar #解压xxx.tar,部署镜像
另一种方法为export,这样生成的镜像只包含系统文件,以此镜像生成容器要加bash
2、传输到内网其他服务器
从一台机器传到内网另一台机器,前面为源,后为目标。要确保用户权限。
scp /home/proj/xxx.tar username@1.1.1.1:/home/proj
六、其他
1、移动硬盘挂载
sudo df -l #查看需要挂载的硬盘
mkdir /mnt/usr
sudo mount dev/sda1 /mnt/usr
sudo umount /mnt/usr #用完后卸载再拔
2、修改用户文件夹及终端
vim etc/passwd
不要随便改。保存“:wq!”