使用pycharm调用docker中的python环境,并处理宿主机的文件

目录

前言

一、准备工作

二、为docker镜像配置ssh-server

三、将本地目录映射到docker容器中

四、将pycharm于docker容器相链接


前言

本文中,将详细讲述如何使用pycharm调用docker中的python环境,并处理宿主机(本地)中的文件。
一、准备工作

本文所需要的工具如下

1.pycharm(专业版),只有专业版才支持ssh链接进行调试,而本文中pycharm与docker容器之间的链接就是通过ssh来完成的(注意,不是镜像),没有专业版的小伙伴可以去官网使用edu邮箱申请一下。

2.docker社区版,这个直接上官网下载就好了,安装教程见https://blog.csdn.net/ambm29/article/details/96151358

3.配置好python环境的docker镜像,可以直接从docker hub上下载,也可以参照如下教程进行配置:https://blog.csdn.net/ambm29/article/details/96278696


二、为docker镜像配置ssh-server
首先启动docker镜像,创造一个新的容器,并在该容器中安装ssh-server

    PS C:UsersChenJH> docker run -it ubuntu:potk
    # 创造docker容器
     
    (base) root@dd53ea4c2f2b:/# apt-get install openssh-server
    # 安装ssh-server

之后检查ssh-server是否安装成功

(base) root@dd53ea4c2f2b:/# service ssh start

出现如下结果,即为安装成功

 
接下来,设置ssh-server自动启动

echo 'service ssh start'>>~/.bashrc

随后,为ssh登录设置一个密码,这里密码暂定为csdn,请牢记你的密码,同时,用户名默认为root

    (base) root@dd53ea4c2f2b:/# passwd
    Enter new UNIX password:
    Retype new UNIX password:
    passwd: password updated successfully

使用命令vim /etc/ssh/sshd_config,修改下面两个配置

    PermitRootLogin yes  
     
    UsePAM no

如果没有安装vim,使用如下命令安装

    apt-get install vim
     
    echo ':set term=builtin_ansi' >> /usr/share/vim/vimrc
    # 第二行如果不加的话会出现在vim中方向键使用失灵的情况

到这里,docker容器中的ssh-server就已经全部配置成功了,下面我们将该容器提交为镜像,留在后面使用。

    (base) root@dd53ea4c2f2b:/# exit
    exit
    PS C:UsersChenJH> docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS                   NAMES
    dd53ea4c2f2b        ubuntu:potk         "/bin/bash"              About an hour ago   Exited (0) 13 seconds ago                                condescending_kell
    PS C:UsersChenJH> docker commit dd53ea4c2f2b ubuntu:ssh
    sha256:a3d978258f5901210263cfa730d8b54a230df356e4c302b4a22e0ebd744e21a3
    PS C:UsersChenJH> docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    ubuntu                     ssh                 a3d978258f59        5 seconds ago       8.94GB
    ubuntu                     potkd               c7c187496762        30 hours ago        9.01GB

不熟悉有关镜像和容器相关操作的朋友可以看这篇教程https://blog.csdn.net/ambm29/article/details/96151358


三、将本地目录映射到docker容器中
笔者认为,我们之所以配置docker,是因为docker可以被当作一种可移植的开发环境,通过组建自己的docker,可以在很方便的将开发环境中的程序部署到生产环境中。

但是在实际应用时,如果将需要处理的数据和代码都放入docker镜像或者容器中,docker镜像会变得越来越庞大,因此我们使用映射本地文件夹到docker容器中的方法,就可以通过docker中的环境来处理本地文件了。

docker映射本地文件夹的命令如下:

docker run -v [本地文件夹的路径]:[docker容器中映射的目标文件夹路径] [IMAGE]:[TAG]

如上所示,我们将本地的‘C:opencv’文件夹,映射到docker容器中的‘/data’文件夹中。

docker run -it -v C:opencv:/data ubuntu:ssh

我们来试试效果:

    PS C:UsersChenJH> docker run -it -v C:opencv:/data ubuntu:ssh
     * Starting OpenBSD Secure Shell server sshd
    # 启动容器
     
    (base) root@4661eca714bc:/# cd /data/
    # 切换到/data目录
     
    (base) root@4661eca714bc:/data# ll
    total 4
    drwxrwxrwx 2 root root    0 Jul 19 09:42 ./
    drwxr-xr-x 1 root root 4096 Jul 19 09:44 ../
    drwxrwxrwx 2 root root    0 Jul 10 01:29 opencv/
    # 查看该文件夹中有什么文件
     
    (base) root@4661eca714bc:/data# mkdir hello_docker
    # 为了验证效果,我们在该目录下新建一个叫hello_docker的文件夹
     
    (base) root@4661eca714bc:/data# ll
    total 4
    drwxrwxrwx 2 root root    0 Jul 19 09:44 ./
    drwxr-xr-x 1 root root 4096 Jul 19 09:44 ../
    drwxrwxrwx 2 root root    0 Jul 19 09:44 hello_docker/
    drwxrwxrwx 2 root root    0 Jul 10 01:29 opencv/
    # 可以看到,文件夹建立成功

接下来,切换到windows,看看‘C:opencv’下有没有多出一个文件夹。

OK,离成功又进一步,这说明我们在docker环境中成功处理了宿主机中的文件。


四、将pycharm于docker容器相链接
为了使pycharm可以通过ssh链接到docker容器,我们需要为docker容器分配端口,分配端口的命令如下:

docker run -p [宿主机端口号]:[要映射的docker容器端口号] [IMAGE]:[TAG]

如上,我们使用以下命令开启开启映射端口并且映射目录的容器,在这里,我们将docker容器中的22端口(ssh默认端口)映射到宿主机的10001(随便写的)端口中。不同的是,我们这次不启动docker的命令行,而是使用守护进程的方式让docker容器在后台运行,这时,只需要把'-it'改成'-id‘就行,‘d’在这里的意思即为让该容器以守护进程的方式运行。

docker run -id -p 10001:22 -v C:UsersChenJHDocumentsDataSet:/data  --privileged=true -d ubuntu:ssh /usr/sbin/init

 
可以看到,我们的容器不仅运行成功,而且端口也映射好了,现在我们对docker镜像的操作就可以告一段落,下面我们将进入pycharm进行设置。

首先确认我们的Pycharm是专业版,分辨方法也非常简单,在启动pycharm时,如果有看到professional字样,那就说明你的pycharm是专业版啦。

在本文中,我们添加为pycharm添加docker环境的方法是通过远程ssh的方式来添加的,但其实Pycharm已经为我们设置好了直接使用docker环境的方法,但是笔者一直没有调试成功,所以这也是一种曲线救国的办法吧。

打开pycharm后,在状态栏中选择File->Settings->progect:[你的项目名字]->project interpreter->页面左上的小齿轮->Add

 
之后,选择SSH Interpreter(如果没这个选项说明你pycharm的是社区版),然后按照图中的设置,注意port中要填入你,刚才映射到宿主机中端口号(上一步中我们将docker容器中的22端口映射到了10001端口,因此这里填写10001),127.0.0.1的意思是本地环回,不太理解的朋友们照着填就好了。

 
输入密码,刚才设置的密码是csdn。

下面这一步比较复杂,大家可以结合实践多试试,在Interpreter中设置你的Python环境安装路径,不确定的话就去docker容器中找一找。

 
Sync folders中填写本地要和docker容器中哪个文件夹建立联系,因为pycharm远程的原理是将远程的Py文件下载到本地修改,然后在运行和调试时发送到远程去执行。注意,这里的远程和本地分别置docker镜像和宿主机。(仔细看路径,还记得我们将本地的文件夹映射到了/data路径么,所以这里其实处理的是本地的程序)

之后,远程环境就已经配置好了,我们在状态栏中选择Tools->Deployment->Browse Remote Host

就可以看到我们docker容器的里的文件系统了,如下图所示,我们找到刚才设置的远程映射路径,如果你的路径找对的话,文件夹会显示为绿色,如下图所示。

 
我们右键绿色的文件夹,选择Sync with local,他会扫描本地与远程的差异,见下图

 
因为只需要同步py文件,因此在Filter中输入*.py,之后点回车,在点击绿色的快进号(两个三角形),本地的py文件就下载好了。如下图所示。

 
现在,我们就可以像编辑本地文件一样,通过docker里的Python环境来处理本地数据了(其实/data路径映射的是本地的文件夹)。当然这块有点复杂,希望大家可以动手实际操作下。

参考:https://blog.csdn.net/ambm29/article/details/96483086

原文地址:https://www.cnblogs.com/lantingg/p/14927981.html