背景:有些實(shí)驗(yàn)需要在服務(wù)器上完成,因此為了快速便利地在本地調(diào)試遠(yuǎn)程服務(wù)器上的代碼,需要完成本地與遠(yuǎn)程服務(wù)器的直連。然而現(xiàn)階段諸多服務(wù)器上安裝有docker,通常需要在docker內(nèi)完成調(diào)試代碼,因此本文主要提供遠(yuǎn)程訪問(wèn)服務(wù)器docker的配置方法。
需要工具及說(shuō)明:
- 一臺(tái)遠(yuǎn)程服務(wù)器
- pycharm:集成開(kāi)發(fā)工具,在本地安裝
- ssh:遠(yuǎn)程訪問(wèn)工具,本地和遠(yuǎn)程服務(wù)器都要有
- docker:容器,在遠(yuǎn)程服務(wù)器上
1、配置遠(yuǎn)程服務(wù)器docker
第一步:購(gòu)置配置服務(wù)器(如果已有服務(wù)器跳過(guò))
可自行在阿里云或騰訊云等服務(wù)器提供商購(gòu)買(mǎi)centos服務(wù)器,或使用公司或?qū)W校提供的服務(wù)器,但需要注意的是,如果公司或?qū)W校的服務(wù)器需要在VPN環(huán)境內(nèi)訪問(wèn),則需要提前連接VPN后再訪問(wèn)服務(wù)器。
第二步:安裝docker(如果已有docker則跳過(guò))
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
詳細(xì)可參考文末參考文獻(xiàn)【2】
注:sudo命令是指使用最高權(quán)限r(nóng)oot執(zhí)行,如果當(dāng)前賬戶是root則無(wú)需sudo命令。
第三步:拉取鏡像
鏡像官方網(wǎng)站是 Docker Hub,在上面可以找到符合自己生產(chǎn)需要的鏡像。我們以pytorch為例,拉取鏡像:
sudo docker pull pytorch/pytorch
即可下載相關(guān)文件,可通過(guò)下面命令查看已經(jīng)拉取的鏡像:
詳細(xì)可參考文末參考文獻(xiàn)【6】
第四步:創(chuàng)建容器
獲取鏡像后,需要根據(jù)鏡像實(shí)例化一個(gè)容器,此處實(shí)例化容器使用run命令:
ssudo docker run -p [自選端口號(hào)]:22 --gpus all -itd --name [自己起個(gè)名字] -v [宿主機(jī)(本地)的目錄](méi):[自定義創(chuàng)建好的容器內(nèi)的目錄](méi) /bin/bash
執(zhí)行上面命令可以完成實(shí)例化一個(gè)容器,其中的相關(guān)參數(shù)有:
- -p [自選端口號(hào)]:22:同時(shí)將該容器映射到對(duì)應(yīng)的端口號(hào),并與22號(hào)端口進(jìn)行關(guān)聯(lián)監(jiān)聽(tīng);
- –gpus all:指定該實(shí)例化的容器內(nèi)可使用所有宿主機(jī)包含的gpu;
- -i:保持STDIN開(kāi)啟;
- -t:分配一個(gè)偽終端;
- -d:在后臺(tái)運(yùn)行
- –name [自己起個(gè)名字]:為了避免記住冗長(zhǎng)復(fù)雜的容器id,通??蔀槿萜髟O(shè)置一個(gè)名稱,注意不要與現(xiàn)有的名稱相同;
- -v [宿主機(jī)(本地)的目錄](méi):[自定義創(chuàng)建好的容器內(nèi)的目錄](méi):為了讓容器內(nèi)的文件與宿主機(jī)保持同步,可執(zhí)行該參數(shù),注意自定義創(chuàng)建好的容器內(nèi)目錄必須是絕對(duì)路徑。
另外 -i ,-t 和 -d 可同時(shí)寫(xiě)在一起,例如 -it ,-itd 。
例如命令:
sudo docker run -p 8848:22 --gpus all -itd --name wjn -v /home/gm/wangjianing/docker:/wjn pytorch/pytorch /bin/bash
其表示實(shí)例化鏡像pytorch/pytorch為一個(gè)容器,其占用宿主機(jī)端口號(hào)為8848,并與ssh端口22保持關(guān)聯(lián)監(jiān)聽(tīng),可使用所有g(shù)pu,名稱為“wjn”,宿主機(jī)的地址“/home/gm/wangjianing/docker”與容器內(nèi)目錄“/wjn”保持關(guān)聯(lián),使用/bin/bash作為命令腳本。
創(chuàng)建完之后,可查看所有已經(jīng)實(shí)例化的容器
第五步:開(kāi)通端口
如果端口有防火墻保護(hù),則需要自行開(kāi)通:
sudo /sbin/iptables -I INPUT -p tcp --dport 8848 -j ACCEPT
第六步:?jiǎn)?dòng)容器
啟動(dòng)容器,以使得該容器處在運(yùn)行狀態(tài):
sudo docker start [容器id或自己起的名字]
例如剛才創(chuàng)建好的容器編號(hào)為“5621fade441e”,名稱為“wjn”,則可以執(zhí)行:
sudo docker start 5621fade441e
或
啟動(dòng)后,可通過(guò):
查看所有已啟動(dòng)并運(yùn)行的容器,如圖:
注:至此應(yīng)該可以看到該容器的相關(guān)信息, 特別注意PORTS屬性,需要有端口信息才能判斷當(dāng)前創(chuàng)建的容器是可以通過(guò)端口訪問(wèn)的,如果沒(méi)有此信息,則無(wú)法完成遠(yuǎn)程訪問(wèn)容器,且目前無(wú)法直接修改已創(chuàng)建好的容器的端口,所以只能重新創(chuàng)建。
第七步:進(jìn)入容器
進(jìn)入容器可使用命令:
sudo docker exec -it [容器id或自己起的名字] /bin/bash
2、容器配置ssh
博主之前以為創(chuàng)建好docker之后,就可以直接通過(guò)ssh訪問(wèn)該容器了,但是后來(lái)發(fā)現(xiàn)還需要進(jìn)入容器內(nèi)進(jìn)行一系列的ssh配置,主要步驟如下:
第八步:安裝ssh:
進(jìn)入剛創(chuàng)建好的容器,先執(zhí)行如下命令:
apt update
apt install -y openssh-server
然后建立一個(gè)配置文件夾并進(jìn)行必要的配置:
mkdir /var/run/sshd
echo ‘root:passwd' | chpasswd
注意,這里的root表示待會(huì)要遠(yuǎn)程訪問(wèn)的用戶名,passwd為訪問(wèn)密碼,可自行設(shè)置,例如本人設(shè)置的為:
echo ‘root:123456' | chpasswd
第九步:設(shè)置登錄權(quán)限:
執(zhí)行下面三行命令設(shè)置權(quán)限
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配置文件
博主完成第二步后,依然無(wú)法遠(yuǎn)程連接,因此經(jīng)過(guò)查詢后發(fā)現(xiàn),需要修改相關(guān)配置文件:
執(zhí)行下面命令打開(kāi)ssh配置文件:
如果vim沒(méi)有安裝,則執(zhí)行:
打開(kāi)后,修改文件:
AddressFamily any 前面的 # 刪除
修改PermitRootLogin yes 前面的 # 刪除
修改PasswordAuthentication yes 前面的 # 刪除
在vim編輯器中,執(zhí)行命令保存并退出:
:wq
最后重啟ssh服務(wù):
詳細(xì)可參考參考文獻(xiàn)【1】和【3】
3、ssh測(cè)試
配置完后,按理來(lái)說(shuō)應(yīng)該完成了服務(wù)器的設(shè)置,下面可以進(jìn)行簡(jiǎn)單的測(cè)試,例如
(1)在宿主機(jī)中執(zhí)行命令查看當(dāng)前端口,可知有8848端口
(2)在宿主機(jī)上執(zhí)行命令,也可以查看當(dāng)前容器是否存在對(duì)應(yīng)的端口映射關(guān)系:
sudo docker port [容器id或自己起的名字] 22
例如,博主執(zhí)行后返回0.0.0.0:8848,說(shuō)明成功
(3)進(jìn)入容器內(nèi),執(zhí)行:
python3
進(jìn)入python環(huán)境,再依次執(zhí)行
import torch
print(torch.cuda.is_available())
如果返回 True,說(shuō)明該docker可以使用GPU了。
(4)遠(yuǎn)程訪問(wèn)試一試,任意在一臺(tái)聯(lián)網(wǎng)的機(jī)器上(若在局域網(wǎng)內(nèi),則需要連VPN)執(zhí)行:
ssh [第八步創(chuàng)建的用戶名]@[你的服務(wù)器地址] -p [自己定義的端口號(hào)]
如果顯示輸入密碼,說(shuō)明連接成功,輸入密碼后即可直接進(jìn)入對(duì)應(yīng)的容器。例如博主執(zhí)行:
ssh root@10.11.6.13 -p 8848
顯示如下信息說(shuō)明已經(jīng)連接成功。
4、pycharm測(cè)試
如果使用pycharm直接訪問(wèn)遠(yuǎn)程服務(wù)器docker,則可以在pycharm上進(jìn)行相關(guān)設(shè)置:
第十一步:安裝pycharm(已安裝直接跳過(guò))
需要安裝專(zhuān)業(yè)版的pycharm,安裝后,可通過(guò)激活碼、或直接去官網(wǎng)使用學(xué)生郵箱注冊(cè)一個(gè)賬號(hào)可免費(fèi)使用一年,安裝后進(jìn)入pycharm
詳細(xì)可參考文末參考文獻(xiàn)【7】
第十二步:設(shè)置ssh
如下圖,依次點(diǎn)擊后進(jìn)入菜單:
然后新增一個(gè)連接,由左向右依次點(diǎn)擊:
進(jìn)入編輯ssh界面,填寫(xiě)配置信息:
點(diǎn)擊“Test Connection”測(cè)試一下,如果success則說(shuō)明pycharm也可以連接遠(yuǎn)程容器了:
返回到上一個(gè)頁(yè)面,選擇配置好的ssh后,可以再選擇需要pycharm關(guān)聯(lián)到容器內(nèi)的具體的目錄。例如博主直接選擇在創(chuàng)建容器時(shí)域宿主機(jī)進(jìn)行關(guān)聯(lián)的目錄/wjn作為pycharm可更新上傳的位置,最后保存即可。
至此完成所有配置工作,在pycharm可以自由地與服務(wù)器docker內(nèi)的項(xiàng)目進(jìn)行調(diào)試了
參考文獻(xiàn):
【1】SSH客戶端遠(yuǎn)程登陸Linux服務(wù)器密碼總是錯(cuò)誤問(wèn)題
【2】Docker安裝
【3】PyCharm+Docker:打造最舒適的深度學(xué)習(xí)煉丹爐
【4】pycharm遠(yuǎn)程連接服務(wù)器運(yùn)行代碼加調(diào)試
【5】解決pytorch GPU 計(jì)算過(guò)程中出現(xiàn)內(nèi)存耗盡的問(wèn)題
【6】Docker 鏡像使用
【7】學(xué)生如何免費(fèi)使用Pycharm專(zhuān)業(yè)版全部功能
到此這篇關(guān)于pycharm與ssh遠(yuǎn)程訪問(wèn)服務(wù)器docker的詳細(xì)教程的文章就介紹到這了,更多相關(guān)pycharm遠(yuǎn)程訪問(wèn)docker內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!