VS code远程连接linux服务器中docker里的python

VS code远程连接linux服务器中docker里的python

环境

linux:centos 7

python:3.10

vs code: 1.63

1.建目录

首先,创建目录 python,用于存放后面的相关东西。

#在根目录下创建python/app文件夹
mkdir -p ~/python ~/python/myapp

myapp 目录将映射为 python 容器配置的应用目录。

进入创建的 python 目录,创建 Dockerfile。

2.创建python3容器

方法一:

docker run -d --name mypython -p 8022:22 -v /automl:/workspace/automl -it python:latest /bin/bash
  • -p 8022:22 把docker的端口22映射到服务器的8022端口,这样之后通过 ssh root@ -p 8022就能访问到docker了
  • -d 容器后台运行,避免退出容器后容器自动关闭;
  • -v 挂载和同步目录,这样服务器和docker内就有一个文件夹会试中保持同步了。
  • -it 让docker后台交互运行
  • python:latest 镜像名
  • 最后是docker内要运行的指令。

方法二:

#前提是docker已经存在 python:latest 镜像
docker run --name mypython -it python:latest -v $PWD/myapp:/usr/src/python  -w /usr/src/python /bin/bash
  • -i:交互操作

  • -t:终端

  • python:latest 对应的即为 REPOSITORY:TAG

  • /bin/bash:这里我们希望有个交互式 Shell,因此用的是 /bin/bash

  • -v $PWD/myapp:/usr/src/python

    将主机中当前目录下的 myapp (先cd到当前目录,确保当前目录下有myapp文件夹)挂载到容器的/usr/src/python

  • -w /usr/src/python

    指定容器的 /usr/src/python 目录为工作目录

3.进入容器内配置

3.1添加ssh服务

进入docker

#查看mypython的容器id
docker ps -a
#进入容器ID为18f89ebd83aa的容器内部
docker exec -it 18f89ebd83aa /bin/bash

在容器中输入以下内容,安装ssh服务

#apt是 Shell前端软件包管理命令
apt update
apt install -y openssh-server

输入vim /etc/ssh/sshd_config,打开ssh配置文件,修改以下内容,以允许root账户通过密码登录:
VS code远程连接linux服务器中docker里的python_第1张图片

注释掉这行:PermitRootLogin prohibit-password

新建一行 添加PermitRootLogin yes

说明:

PermitRootLogin yes 允许root登录,设为yes。

PermitRootLogin prohibit-password 允许root登录,但是禁止root用密码登录

很明显这行是需要被注释掉的!!!

确保配置文件中这几项是如下内容

PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径
PermitRootLogin yes #root能使用ssh登录

要修改root用户的密码(在容器内)

[root@*******]# passwd
Changing password for user root.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

重启ssh,退出docker然后测试一下。

#重启ssh服务
/etc/init.d/ssh restart
#另一个重启ssh服务的语句
#service ssh restart
#退出容器
exit
# 输入一下指令,验证端口映射无误
sudo docker port [容器ID] 22
# 如果设置正确,将输出:
#0.0.0.0:8022

备注:

退出docker后ssh connection refused.

原因:退出docker后,ssh会被关掉,先通过服务器docker exec进入container,然后输入以下指令启动ssh服务

/etc/init.d/ssh start

在自己的笔记本上,打开cmd,输入ssh尝试连接

ssh username@server_IP -p 8022
# 回车后输入密码,就可以从本地登录远程服务器的docker了

4 配置VS Code

打开VS code,在扩展栏(或者按ctr+shift+X)查找安装Remote Development
VS code远程连接linux服务器中docker里的python_第2张图片

安装完成后需要reload一下,然后按ctr+shift+p,打开查找栏,输入remote-ssh,选择open Configuration file

在这里插入图片描述

Host随便起名字,这里我用AutoML_docker命名。在HostName的地方输入服务器的ip,注意端口Port是我们之前docker映射到服务器上的端口号。

在这里插入图片描述

配置成功后左边会多出一个远程浏览的标签,点开就可以看到刚才配置的远程连接了。点击之后要输入密码,即我们创建docker后修改的root密码。

在这里插入图片描述

5配置vscode debugger

菜单查看-扩展或者Ctrl + Shift + X,在商店中搜索“Python”,找到“适Python extension for Visual Studio Code”安装在服务器docker中,然后重启VSCode。
之后,菜单查看-命令面板或者Ctrl + Shift + P,输入“python: select interpreter”,点击选择解析器,稍等几秒钟,就会列出在系统中找到的Python环境(Python环境要加入环境变量才能被找到),点击需要的python解析器即可。

出现找不到python的原因,很有可能是版本没装对。

VS code远程连接linux服务器中docker里的python_第3张图片

应该是红框里的这个

打开debug选项卡,选择Add configuration
在这里插入图片描述

编辑launch.json文件如下:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    
    
        {
            "type": "python",
            "request": "launch",
            "name": "Python: Current File (Integrated Terminal)",
            "skipFiles": [
                "/**"
            ],
            "program": "${file}"
        }
    ]
}

launch.json常用的调试配置有:

  • “Python: Current File (Integrated Terminal)”:该配置表示在VSCode内置的命令行中直接执行当前激活的Python文件。如果需要制定要执行的文件,可以修改"program": " f i l e " 中 的 {file}"中的 file"{file}宏为需要的文件。
  • “Python: Current File (External Terminal)”:该配置功能和上面的相同,区别是不使用VSCode内置命令行,而新打开一个命令行。
  • “Python: Attach”:该配置是附件到另外一个进程的调试方式。

6 结束

Ok,至此配置VScode就结束了,可以选择刚才配置的解释器来逐行调试docker内的代码了。因为docker的代码是通过-v与服务器同步的,所以修改后也会直接改动服务器上存的代码,大家git的时候就只需要在服务器端设置,而不用在docker内再考虑这个问题了。

7 容器保存为镜像

#docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "dadao" -m "my test" a404c6c174a2  mymysql:v1
#示例
docker commit -a "dadao" -m "配置好的python" 18f89ebd83aa  mypython:v20211123

OPTIONS说明:

  • **-a *提交的镜像作者;
  • a404c6c174a2 容器ID
  • mymysql:v1 镜像:标签
  • **-c *使用Dockerfile指令来创建镜像;
  • **-m *提交时的说明文字;
  • **-p *在commit时,将容器暂停。

8 基于新镜像启动容器

–基于新镜像运行容器

docker run -t -i -p 8022:22 --name 新容器名称 镜像名称:镜像标签 /bin/bash

docker run -p 8022:22 -d centos7-ssh:latest /run.sh

当容器内22端口启动后才可以用docker ps -a看到相应的端口

保证22端口启动后就可以进行远程 连接了。

9 附注

9.1 查看容器开放的端口

docker port 18f89ebd83aa
#查看docker ID为18f89ebd83aa的容器开放端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irvubaS6-1637643489541)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211123122130398.png)]

22是容器端口;

-d centos7-ssh:latest /run.sh**

当容器内22端口启动后才可以用docker ps -a看到相应的端口

保证22端口启动后就可以进行远程 连接了。

9 附注

9.1 查看容器开放的端口

docker port 18f89ebd83aa
#查看docker ID为18f89ebd83aa的容器开放端口

[外链图片转存中…(img-irvubaS6-1637643489541)]

22是容器端口;

0.0.0.0:8022是22映射到宿主机上的端口。

参考:[https://blog.csdn.net/lifengss/article/details/105300459]

你可能感兴趣的:(docker学习笔记,python学习笔记,python,docker,容器)