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】

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_上传

(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解释器可忽略

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_上传_02

    (2)连接docker-host:

        导航栏依次点击 File ---> Settings,弹窗 Settings对话框,继续点击 Build, Execution, Deployment ---> Docker 

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_Docker_03

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已经存在

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_docker_04

        (2)配置docker-host和pychram目录映射,上传pycharm源码到docker-host

              导航栏依次点击 Tools ---> Deployment ---> Confiuration ,弹窗 Deployment对话框

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_Docker_05

               配置账号和密码,测试连接是否成功

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_docker_06

              配置pycharm和docker-host上的目录映射

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_上传_07

              上传pycharm工程下的代码到docker-host上

Deployment ---> Upload to root@10.74.52.141,即可。

        (3)配置docker环境,并运行程序

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_docker_08

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_Docker_09

    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环境,并运行程序

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_docker_10

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_Docker_11

    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环境,并运行程序

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_上传_12

pycharm远程连接到docker容器中调试代码 pycharm docker远程开发_上传_13