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 | 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環境,並執行程式