pycharm與ssh遠端存取伺服器docker

2020-10-11 11:00:44
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專業版全部功能