Pycharm遠程調試之Docker debug

關於連接Linux Docker

我們以前使用的是Docker Toolbox,在配置的時候pycharm也是自動填充的是關於Docker Toolbox的信息,看來是對 Docker Toolbox的支持是比較好的。

 

我們需要了解以下幾件事:

1、Docker是無法遠程掛載目錄的,只能掛載宿主機的目錄

2、Pycharm會在連接到"Docker宿主機"後會在宿主機中建立一個/c/User/...目錄

3、我們需要用的Pycharm的Deployment功能把我們的工程同步到/c/User..目錄中

4、我沒有試驗其它目錄下的工程,不知道會不會創建一個/d/xxx的目錄

 

 

好了,讓我們開始

一、我們準備下

1、在我們宿主機上安裝docker,現在docker 也學mysql分了ce和ee版本,安裝ce版本就行,centos上需要注意firewall,ubuntu需要15.10版本及以上。

2、安裝各種軟件

3、設置加速器

4、pull一個基本鏡像下來(docker pull ubuntu)

                  

 

二、設置docker端口

Docker默認是不開啓端口的,我們需要在service文件中設置

1、  修改 service文件

不同的Linux系統service的配置文件所在位置不同,我們可以通過systemctl status docker來查看

 

Ubuntu

 

 

Centos

                 

我們需要修改進入.service文件中在/usr/bin/dockerd命令後加上:

-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

 

2、  systemctl daemon-reload      #重載service文件

systemctl restart docker     #重啓docker service

 

3、  查看docker端口

netstat –tulnp | grep docker

        

  好了,我們的docker程序已經監聽到了2375端口上了。

  Centos要麼關防火牆,要麼添加端口進去

 

 

三、pycharm連接docker

pycharm連接docker使用的是tcp協議,不過http協議也是可以的。

 

當你填完後先別OK,先apply,pycharm會測試是否連接成功。centos注意防火牆

(除了api_url和name,其它的都是不需要的,這是因爲pycharm默認是docker toolbox而自動填充這些值,處女座的同學可以刪掉,反正他們不生效,注意那個share是不生效的)

 

PyCharm設置

用過python的人對pycharm肯定非常熟悉了,能不能在pycharm裏使用docker呢?pycharm says-yes!不過,首先你需要一個Professional edition版的pycharm。下面開始設置(英文好的看這裏):

  1. 保證Docker integration和Python Docker兩個插件是開啓的 
    Professional版的pycharm默認是安裝了這兩個插件,並且是開啓的。
  2. docker配置 
    在pycharm的設置->build,Execution,Deployment->Docker頁面裏,點擊‘+’號就會出現一個docker設置頁面,我們是Linux系統所以我們在Connect to Docker daemon with選項裏直接選Unix socket就可以了。如果設置成功會在下方看到Connection successful的提示,如果你跳過了安裝docker和MXnet中的第2步,這一步就會有權限不夠的錯誤提示。這裏寫圖片描述 
    如果這一步成功了,就可以在pycharm下方看到Docker tool window,這是一個用來管理鏡像,容器的可視化工具。 
    這裏寫圖片描述 
    在這裏可以很方便的啓動,停止,添加和刪除鏡像、容器。也可以查看容器的一些參數。當然也可以使用docker的指令進行這些操作。 
    這裏寫圖片描述

  3. 爲你的代碼配置鏡像裏的解釋器 
    其實整篇文章就只爲了這一步,只要我們的代碼能使用鏡像裏的python解釋器,那就達到了我們的目的了。添加本地解釋器大家應該都會。在Professional版的pycharm裏有個添加遠程解釋器。我們就是用這個 
    這裏寫圖片描述
    點擊後會出現下邊這個對話框 
    這裏寫圖片描述 
    我們選擇Docker這個選項,此時Server和Python interpreter path已經自動填好,大家不用管它,主要是選擇你要使用的鏡像。如果你不使用GPU版的鏡像,那麼其實到了這一步就已經配置好了。 
    說一下我這裏爲什麼選擇tensorflow/tensorflow:latest-gpu鏡像,不是已經裝好了MXnet了嘛?說多了都是淚啊!MXnet的鏡像裏並沒有吧MXnet安裝在python的安裝包路徑下,而是在根路徑下,使用nvidia-docker run -it mxnet/python:gpu bash指令啓動時通過設置PYTHONPATH=/mxnet/python環境變量讓python可以使用,但是!當你在pycharm中啓動時,這個環境變量是沒有設置的。所以import mxnet會不成功。這個問題還是有方法解決的,就是在Edit Configuration裏添加環境變量。而且只能在這裏添加,別的地方添加不好用,反正我實驗的是不行的。 
    這裏寫圖片描述 
    使用tensorflow的鏡像就不會有這個問題,因爲tensorflow是安裝在python的的路徑下的。所以請大家在接下來也先使用tensorflow作爲這次配置的鏡像,我們這次的目標是能在GPU上跑,所以用下面的指令下載GPU版的 
    docker pull tensorflow/tensorflow:latest-gpu

  4. 使用GPU運行你的代碼 
    到這裏有人就會發現問題,之前我們裝了dockernvidia-docker那pycharm用的是哪一個呢?很不幸的是pycharm使用的是標準的docker。 那麼這就有問題,我們不能使用GPU做運算。如何才能使用GPU呢? 
    實際上如果我們用的是nvidia-docker1我們可能還需要安裝docker-composenvidia-docker-compose,很不幸nvidia-docker-compose不能和nvidia-docker2兼容,那怎麼辦?看這裏,這個連接提供瞭解決的方法就是吧"default-runtime": "nvidia",添加到/etc/docker/daemon.json文件中

    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "/usr/bin/nvidia-container-runtime",
                "runtimeArgs": [ ]
            }
        }
    }
    • 接下來是非常關鍵的一步,也是最白癡的一步,我在這裏卡了很久。 

    重啓docker的守護進程 
    重啓docker的守護進程 
    重啓docker的守護進程 
    sudo pkill -SIGHUP dockerd 
    由於我的電腦下班後不關機,所以只要我不主動重啓docker守護進程,這幾天就從沒有重啓過。這樣我們剛剛改的daemon.json文件是不會生效的。所以一直不能使用GPU運算。

四、設置Interpreter

這時候我們就可以設置我們的interpreter了

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章