方法一:使用ssh服务远程连接容器
0. 前提条件
- 本地windows或其他环境中安装了Vscode,Vscode中安装了Remote-SSH拓展(用于利用SSH连接docker容器)
- 远程服务器中安装了docker,并且拉取了自己需要的镜像(image)
- 有root权限,能使用sudo命令
完成以下过程,可以像本地开发一样,对容器进行开发和测试。
1. 在服务器端启动Docker容器
docker run -itd -p 10008:10008 -v /dev/shm:/dev/shm --name huawei --runtime=nvidia swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu-cuda11.1:1.10.1 /bin/bash
- 1
- -itd: 分别表示以交互式模式、分离模式(在后台运行)以及为容器分配一个终端。
- -p 10008:10008: 这将主机的端口 10008 映射到容器的端口 10008,以便可以通过主机的端口访问容器内的服务。 重点配置,同时用于后续VScode访问。
- -v /dev/shm:/dev/shm: 这将主机的 /dev/shm 目录挂载到容器的 /dev/shm 目录,为了共享内存,可以不指定。
- –name huawei: 这为容器指定了一个名称,即 “huawei”。
- –runtime=nvidia: 这表示使用 NVIDIA GPU 的运行时。一般项目可不指定。
- swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu-cuda11.1:1.10.1: 这是容器镜像的名称和版本,指定了使用的 MindSpore 版本。
- /bin/bash: 这是在容器中要运行的命令,即启动一个 Bash shell。
2. 进入刚刚启动的docker容器
# 查看正在运行的镜像
docker ps -s
# 进入docker容器
docker exec -it <容器ID> /bin/bash
3. 在容器中安装SSH服务
apt-get update
apt-get install openssh-server
apt-get install openssh-client
apt-get install ssh
apt-get install vim
- 接着修改ssh文件信息,将容器的10008端口暴露出来允许root用户使用ssh登录
vim /etc/ssh/sshd_config
# 在刚刚打开的文件里添加以下内容,保存后退出:
Port 10008
PermitRootLogin yes #允许root用户使用ssh登录
- 重启ssh服务
/etc/init.d/ssh restart
- 设置root用户连接密码
passwd
4. 在容器中设置开机自启动SSH服务
- 在 Docker 容器内运行 SSH 服务时,当容器停止后 SSH 服务会随之关闭,而当容器重新启动后 SSH 服务默认情况下不会自动重启。这是因为 Docker 容器本身是一个隔离的环境,容器内的服务与主机环境是相互独立的。本操作可以用以解决restart容器后使ssh自动启动,从而不影响远程连接。
# 找到并打开文件/root/.bashrc
$ vim /root/.bashrc
# 在.bashrc末尾添加如下代码
$ service ssh start
5. 在VScode中进行配置,连接docker
- 在vscode中
shfit
+ctrl
+p
,输入如下字符,配置ssh文件(vscode需安装remote-ssh拓展)
Open ssh
- 在Configuration中添加:
Host <name>
HostName <服务器IP>
Port 10008
User root
ForwardAgent yes
- 此时可以通过Vscode连接远程服务器的10008端口,由于在启动容器时,设置了端口映射,所以在连接服务器10008端口后,服务器将自动转发到容器的10008端口。
- 点击左下角蓝色图标,选择connect remote host
- 选择刚刚加入的配置HOST,输入密码进入容器内部
此时已经进入容器内部,可以像在本地和远程服务器一样进行容器内部的开发与测试了。后续可以将测试完成的容器重新打包为镜像。
在docker中创建.ssh免密登陆
ssh-keygen -t rsa
进入.ssh
touch authorized_keys
将本机公钥填入
方法二:使用Vscode中的Docker拓展,基于服务器访问容器
0. 前提条件
- 已安装 VS Code。
- 已安装 Docker VS Code 扩展。