热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pycharm与ssh远程访问服务器docker的详细教程_docker

这篇文章主要介绍了pycharm与ssh远程访问服务器docker,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,

  背景:有些实验需要在服务器上完成,因此为了快速便利地在本地调试远程服务器上的代码,需要完成本地与远程服务器的直连。然而现阶段诸多服务器上安装有docker,通常需要在docker内完成调试代码,因此本文主要提供远程访问服务器docker的配置方法。

  需要工具及说明:

  • 一台远程服务器
  • pycharm:集成开发工具,在本地安装
  • ssh:远程访问工具,本地和远程服务器都要有
  • docker:容器,在远程服务器上

1、配置远程服务器docker

第一步:购置配置服务器(如果已有服务器跳过)
  可自行在阿里云或腾讯云等服务器提供商购买centos服务器,或使用公司或学校提供的服务器,但需要注意的是,如果公司或学校的服务器需要在VPN环境内访问,则需要提前连接VPN后再访问服务器。

第二步:安装docker(如果已有docker则跳过)

sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

详细可参考文末参考文献【2】

注:sudo命令是指使用最高权限root执行,如果当前账户是root则无需sudo命令。

第三步:拉取镜像

  镜像官方网站是 Docker Hub,在上面可以找到符合自己生产需要的镜像。我们以pytorch为例,拉取镜像:

sudo docker pull pytorch/pytorch

即可下载相关文件,可通过下面命令查看已经拉取的镜像:

sudo docker images

详细可参考文末参考文献【6】

第四步:创建容器

  获取镜像后,需要根据镜像实例化一个容器,此处实例化容器使用run命令:

ssudo docker run -p [自选端口号]:22 --gpus all -itd --name [自己起个名字] -v [宿主机(本地)的目录]:[自定义创建好的容器内的目录] /bin/bash

执行上面命令可以完成实例化一个容器,其中的相关参数有:

  • -p [自选端口号]:22:同时将该容器映射到对应的端口号,并与22号端口进行关联监听;
  • –gpus all:指定该实例化的容器内可使用所有宿主机包含的gpu;
  • -i:保持STDIN开启;
  • -t:分配一个伪终端;
  • -d:在后台运行
  • –name [自己起个名字]:为了避免记住冗长复杂的容器id,通常可为容器设置一个名称,注意不要与现有的名称相同;
  • -v [宿主机(本地)的目录]:[自定义创建好的容器内的目录]:为了让容器内的文件与宿主机保持同步,可执行该参数,注意自定义创建好的容器内目录必须是绝对路径。

  另外 -i-t-d 可同时写在一起,例如 -it-itd
  例如命令:

sudo docker run -p 8848:22 --gpus all -itd --name wjn -v /home/gm/wangjianing/docker:/wjn pytorch/pytorch /bin/bash

其表示实例化镜像pytorch/pytorch为一个容器,其占用宿主机端口号为8848,并与ssh端口22保持关联监听,可使用所有gpu,名称为“wjn”,宿主机的地址“/home/gm/wangjianing/docker”与容器内目录“/wjn”保持关联,使用/bin/bash作为命令脚本。

  创建完之后,可查看所有已经实例化的容器

sudo docker ps

第五步:开通端口

  如果端口有防火墙保护,则需要自行开通:

sudo /sbin/iptables -I INPUT -p tcp --dport 8848 -j ACCEPT

第六步:启动容器

  启动容器,以使得该容器处在运行状态:

sudo docker start [容器id或自己起的名字]

例如刚才创建好的容器编号为“5621fade441e”,名称为“wjn”,则可以执行:

sudo docker start 5621fade441e

sudo docker start wjn

启动后,可通过:

sudo docker ps -a

查看所有已启动并运行的容器,如图:

在这里插入图片描述

注:至此应该可以看到该容器的相关信息, 特别注意PORTS属性,需要有端口信息才能判断当前创建的容器是可以通过端口访问的,如果没有此信息,则无法完成远程访问容器,且目前无法直接修改已创建好的容器的端口,所以只能重新创建。

第七步:进入容器

  进入容器可使用命令:

sudo docker exec -it [容器id或自己起的名字] /bin/bash

2、容器配置ssh

  博主之前以为创建好docker之后,就可以直接通过ssh访问该容器了,但是后来发现还需要进入容器内进行一系列的ssh配置,主要步骤如下:

第八步:安装ssh

进入刚创建好的容器,先执行如下命令:

apt update
apt install -y openssh-server

然后建立一个配置文件夹并进行必要的配置:

mkdir /var/run/sshd
echo ‘root:passwd' | chpasswd

注意,这里的root表示待会要远程访问的用户名,passwd为访问密码,可自行设置,例如本人设置的为:

echo ‘root:123456' | chpasswd

第九步:设置登录权限

执行下面三行命令设置权限

sed -i ‘s/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sed ‘s@session\srequired\spam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
echo “export VISIBLE=now” >> /etc/profile

第十步:修改ssh配置文件

博主完成第二步后,依然无法远程连接,因此经过查询后发现,需要修改相关配置文件:
执行下面命令打开ssh配置文件:

vim /etc/ssh/sshd_config

如果vim没有安装,则执行:

apt install vim

打开后,修改文件:
AddressFamily any 前面的 # 删除
修改PermitRootLogin yes 前面的 # 删除
修改PasswordAuthentication yes 前面的 # 删除

在vim编辑器中,执行命令保存并退出:

:wq

最后重启ssh服务:

service ssh restart

详细可参考参考文献【1】和【3】

3、ssh测试

配置完后,按理来说应该完成了服务器的设置,下面可以进行简单的测试,例如
(1)在宿主机中执行命令查看当前端口,可知有8848端口

sudo netstat -ntlp

在这里插入图片描述

(2)在宿主机上执行命令,也可以查看当前容器是否存在对应的端口映射关系:

sudo docker port [容器id或自己起的名字] 22

例如,博主执行后返回0.0.0.0:8848,说明成功

(3)进入容器内,执行:

python3

进入python环境,再依次执行

import torch
print(torch.cuda.is_available())

如果返回 True,说明该docker可以使用GPU了。

(4)远程访问试一试,任意在一台联网的机器上(若在局域网内,则需要连VPN)执行:

ssh [第八步创建的用户名]@[你的服务器地址] -p [自己定义的端口号]

如果显示输入密码,说明连接成功,输入密码后即可直接进入对应的容器。例如博主执行:

ssh root@10.11.6.13 -p 8848

显示如下信息说明已经连接成功。

在这里插入图片描述

4、pycharm测试

如果使用pycharm直接访问远程服务器docker,则可以在pycharm上进行相关设置:

第十一步:安装pycharm(已安装直接跳过)

需要安装专业版的pycharm,安装后,可通过激活码、或直接去官网使用学生邮箱注册一个账号可免费使用一年,安装后进入pycharm

详细可参考文末参考文献【7】

第十二步:设置ssh

如下图,依次点击后进入菜单:

在这里插入图片描述

然后新增一个连接,由左向右依次点击:

在这里插入图片描述

进入编辑ssh界面,填写配置信息:

在这里插入图片描述

点击“Test Connection”测试一下,如果success则说明pycharm也可以连接远程容器了:

在这里插入图片描述

返回到上一个页面,选择配置好的ssh后,可以再选择需要pycharm关联到容器内的具体的目录。例如博主直接选择在创建容器时域宿主机进行关联的目录/wjn作为pycharm可更新上传的位置,最后保存即可。

在这里插入图片描述

至此完成所有配置工作,在pycharm可以自由地与服务器docker内的项目进行调试了

参考文献:

【1】SSH客户端远程登陆Linux服务器密码总是错误问题
【2】Docker安装
【3】PyCharm+Docker:打造最舒适的深度学习炼丹炉
【4】pycharm远程连接服务器运行代码加调试
【5】解决pytorch GPU 计算过程中出现内存耗尽的问题
【6】Docker 镜像使用
【7】学生如何免费使用Pycharm专业版全部功能


推荐阅读
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了在Android Studio中使用命令行build gradle的方法,并解决了一些常见问题,包括手动配置gradle环境变量和解决External Native Build Issues的方法。同时提供了相关参考文章链接。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • 对于一般的扩展包,我们一般直接pipinstallxxx即可安装,但是unrar直接安装后,发现并不能通过Python程序实现解压的功能& ... [详细]
  • MySQL5.6.40在CentOS764下安装过程 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • LINUX学习之centos7营救模式
    今天卸载软件的时候,不小心把GNOME的一些组件给卸了,导致桌面无法正常开启,会卡在启动过程中,而我的开机启动模式又是设置为图形界面,所以一开LINUX就卡住了,进入不了命令行界面 ... [详细]
author-avatar
手机用户2502902993
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有