1. 程式人生 > >pycharm遠端除錯docker容器內部程式

pycharm遠端除錯docker容器內部程式

1. 個人開發環境如下:

(1)pycharm專業版(2018.1.2)位於windows10上

(2)docker-daemon(1.13.1)位於centos7上,centos7地址為10.74.53.141

2. 遠端除錯原理:

    在win10上安裝pycharm,在linux上安裝docker engine作為docker-host,在docker-container裡面安裝python直譯器;

    pycharm通過tcp/2375埠與docker-host通訊,可以直接傳送docker指令,然後讓linux執行,

    通過docker指令,可以建立image,執行container,實現host與container之間目錄掛載,埠對映等操作;

    至於程式碼的上傳,不同的docker部署方式不一樣,詳細資訊,看下文。

3. 開啟dacker-daemon遠端接入特性,允許pycharm連線

(1)編輯docker服務配置檔案,儲存修改【vim /lib/systemd/system/docker.service】

(2)過載配置,並重啟服務

        $ systemctl daemon-reload
        $ sudo service docker restart

(3)測試

        在另一臺主機上,比如windows10上,telnet 10.74.53.141 2475,可以成功訪問docker-daemon

4.  pycharm:作為客戶端連線docker-host

    (1)新建一個純python工程,暫時python直譯器可忽略

    (2)連線docker-host:

        導航欄依次點選 File ---> Settings,彈窗 Settings對話方塊,繼續點選 Build, Execution, Deployment ---> Docker 

5. pycharm:配置docker-container(程式的執行環境),並開始除錯

         依次點選【工具欄下方標題欄右邊的下拉箭頭】---> Edit Configurations... --->  彈出【Run/Debug Configurations】對話方塊 --->   依次點選【+】---> Docker ---> 彈出下拉列表

,有三個選項:Docker Image,Docker-compose,Dockerfile。區別如下表:

docker image dockerfile docker-compose
適用場景 適用於docker-host上有程式執行所需的image 適用於docker-host上沒有有程式執行所需的image 適用於docker-host上沒有有程式執行所需的image
映象建立 doker-host上已經存在 dockerfile.ini dockerfile.ini
埠對映 pycharm配置 pycharm配置 docker-compose.yml
目錄掛載 pycharm配置 pycharm配置 docker-compose.yml
容器啟動時執行的命令 pycharm配置 dockerfile.ini dockerfile.ini
程式碼上傳 pycharm通過sftp上傳到docker-host,docker-host通過目錄掛載同步給docker-container dockerfile.ini dockerfile.ini
針對程式碼的改變 無須任何變動 需要增加dockefile.ini檔案 需要增加dockerfile.ini、docker-compose.yml檔案

  6.1 採用docker image方式

        (1)確認docker-host上image已經存在

        (2)配置docker-host和pychram目錄對映,上傳pycharm原始碼到docker-host

              導航欄依次點選 Tools ---> Deployment ---> Confiuration ,彈窗 Deployment對話方塊

               配置賬號和密碼,測試連線是否成功

              配置pycharm和docker-host上的目錄對映

              上傳pycharm工程下的程式碼到docker-host上

    右擊工程目錄下需要上傳到docker-host上的檔案或者資料夾,依次選擇:Deployment ---> Upload to [email protected],即可。

        (3)配置docker環境,並執行程式

    6.2 採用dockerfile方式

        (1)編寫dockerfile.ini檔案

FROM caowencomeon/uwsgi:1.0
COPY src        /testbed/src
COPY uwsgi.ini  /testbed/uwsgi.ini
VOLUME /var/log
VOLUME /data
EXPOSE 5000
CMD ["uwsgi", "/testbed/uwsgi.ini"]

        (2)配置docker環境,並執行程式

    6.3 採用docker-compose方式

        (1)編寫docker-compose.yml檔案

version: "2.0"
volumes:
  applog:
  sharedata:
services:
  app:
    container_name: app-dev
    build:
      context: ./testbed
      dockerfile: dockerfile.ini
    image: app-dev:docker-compose
    volumes:
      - applog:/var/log
      - sharedata:/data
    privileged: true
    ports:
      - 5000:5000

        (2)配置docker環境,並執行程式