美文网首页视觉艺术
PyCharm采用SSH连接Docker镜像搭建Python开发

PyCharm采用SSH连接Docker镜像搭建Python开发

作者: Devops海洋的渔夫 | 来源:发表于2020-06-20 22:46 被阅读0次

    1. 需求

    在Python开发中经常会碰到一些棘手的环境问题,例如:如果开发环境是windows,那么在开发ansible模块的时候,而ansible模块又一般都是安装在linux系统,这时候在windows开发就不好处理了。

    此时,可以考虑连接Docker镜像,而Docker镜像可以采用Centos作为Base Image,这样就可以顺利安装上ansible,然后使用Pycharm连接该Docker镜像来作为开发环境即可。

    而不管是windows还是linux,都是可以支持安装Docker的。

    2. 准备工具

    • PyCharm专业版
    • Docker

    我的工作PC系统是WIN10,准备的Docker是安装在vmware虚拟机的Centos7环境。

    3. 实现原理

    Pycharm的工具是具有通过SSH协议远程访问一个环境作为开发环境的功能的。那么只要创建一个支持SSH远程访问的容器,那么就可以提供作为开发环境了。

    需要做的基本步骤:

    • 构建一个支持SSH服务的镜像 centos:7-ssh
    • 构建基于支持SSH服务,支持执行python3环境的镜像 python_env
    • 配置Pycharm的调试环境使用SSH连接上python_env
    • 配置Pycharm自动同步项目的代码文件至python_env容器中,用于调试代码

    4.构建一个支持SSH服务的镜像 centos:7-ssh

    这个步骤就不在这里编写了,可以查阅我的另一篇文章Docker使用Centos镜像构建使用Openssh

    该具有SSH功能的基础镜像命名为: centos:7-ssh

    测试ssh访问如下:

    # 启动容器,并且执行 /run.sh 脚本,启动ssh服务
    [root@dev docker_ssh_centos]# docker run -d --name centos7_ssh -p 2222:22 centos:7-ssh /run.sh
    5cc134321f63ac365835bac764865a82f6f405d2b7387572edffc8c8c090c867
    [root@dev docker_ssh_centos]# 
    # 查看启动的容器
    [root@dev docker_ssh_centos]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
    5cc134321f63        centos:7-ssh        "/run.sh"           3 seconds ago       Up 2 seconds        0.0.0.0:2222->22/tcp   centos7_ssh
    [root@dev docker_ssh_centos]# 
    # 测试使用ssh访问容器
    [root@dev docker_ssh_centos]# ssh root@127.0.0.1 -p 2222
    The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established.
    RSA key fingerprint is SHA256:Tx4eA0ymIH+W6uOiqdcdNAaEvpwgKlKqbd3uzlHGm+0.
    RSA key fingerprint is MD5:77:6b:f8:cd:6d:ed:86:eb:a0:10:85:dd:02:00:0c:a1.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[127.0.0.1]:2222' (RSA) to the list of known hosts.
    root@127.0.0.1's password: 
    [root@5cc134321f63 ~]# 
    [root@5cc134321f63 ~]# 
    [root@5cc134321f63 ~]# ls
    anaconda-ks.cfg
    [root@5cc134321f63 ~]#
    

    5.构建基于支持SSH服务,支持执行python3环境的镜像 python_env

    有了支持SSH服务的基础镜像centos:7-ssh之后,那么可以在这个镜像的基础上,构建python3的执行环境,提供用于远程环境调试。

    5.1 编写Dockerfile

    # Using Centos for base image
    FROM centos:7-ssh
    
    # author label
    LABEL maintainer="Aron.li"
    
    # install timezone gcc
    ENV ENVIRONMENT DOCKER_PROD
    RUN cd / && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
      && yum makecache \
      && yum install -y wget aclocal automake autoconf make gcc gcc-c++ python-devel mysql-devel bzip2 libffi-devel epel-release \
    # install python 3.7.1
      && wget https://npm.taobao.org/mirrors/python/3.7.1/Python-3.7.1.tar.xz \
      && tar -xvf Python-3.7.1.tar.xz -C /usr/local/ \
      && rm -rf Python-3.7.1.tar.xz \
      && cd /usr/local/Python-3.7.1 \
      && ./configure && make && make install \
    # install pip3
      && yum install -y python-pip \
      && yum install -y python-setuptools \
      && pip3 install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \
      && pip3 install setuptools==33.1.1 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \
      && yum clean all
    
    # copy project
    COPY . /project
    

    5.2 执行构建

    docker build -t python_env .
    

    5.3 运行python_env ,启动容器的ssh服务

    name='python_env'
    image='python_env'
    docker stop $name
    docker rm $name
    docker run -d --name $name -p 2222:22  $image /run.sh
    

    5.4 进入容器,可以查看稍后同步的代码文件,以及在容器内执行代码

    docker exec -it python_env bash
    

    6. 配置Pycharm的调试环境使用SSH连接上python_env

    6.1 选择菜单栏的File > Setting > Project Interpreter > Add , 添加调试环境

    6.2 配置添加SSH调试环境

    6.3 配置添加SSH调试环境中使用的python3路径

    首先在容器中查看一下python3的执行文件路径:

    # 查看python3的执行文件路径
    [root@1e873ed42ef7 /]# whereis python3
    python3: /usr/local/bin/python3 /usr/local/bin/python3.7 /usr/local/bin/python3.7-config /usr/local/bin/python3.7m /usr/local/bin/python3.7m-config /usr/local/lib/python3.7
    [root@1e873ed42ef7 /]# 
    # 测试执行python3执行文件
    [root@1e873ed42ef7 /]# /usr/local/bin/python3
    Python 3.7.1 (default, Apr 16 2020, 15:19:20) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    

    在SSH调试环境中设置python3的执行文件路径,如下:

    image-20200416173405489

    6.4 配置添加SSH调试环境中同步项目文件的路径,也就是拷贝文件的目标地址

    6.5 配置完毕SSH调试环境的信息

    6.6 配置完毕,自动上传项目目录下的文件至服务器

    你会发现设置的本地文件全部都会上传到容器中,如下:

    但是对于venv这个虚拟环境的文件,应该是要排除上传的,下面来配置一下。

    6.7 配置排除SSH上传一些特定的文件

    选中OK之后,这些路径就不会自动同步到服务器上了。

    6.8 执行python脚本,查看调试信息

    创建一个python脚本,点击执行,那么pycharm则会发出一条ssh的命令,将远程执行的信息同步回来展示。

    7. Pycharm远程执行的相关问题

    7.1 脚本自动上传不及时

    我已经将脚本的打印信息修改,但是由于脚本没有上传至容器中,导致还是打印之前的信息。

    这时候还是手动上传比较靠谱,如下:

    这样就可以保证肯定上传成功了。但是这样还是让人体验很不爽。

    7.2 检查SSH传输的配置

    这里提示没有配置默认的服务器组。

    问题的原因:我只配置了一个SSH镜像作为开发调试环境,但是却在配置发现有三个连接配置,顺手删除了2个,难道就是因为这个问题。

    为了排查这个问题,我觉得全部删除一遍,重新配置一下。

    重新配置一遍调试环境,步骤与文档的上方一致。

    重新配置一遍就可以解决问题了,真的是我手贱删除了SSH传输的连接。

    交流QQ群:

    微信公众号:

    相关文章

      网友评论

        本文标题:PyCharm采用SSH连接Docker镜像搭建Python开发

        本文链接:https://www.haomeiwen.com/subject/zkepihtx.html