linux:centos 7
python:3.10
vs code: 1.63
首先,创建目录 python,用于存放后面的相关东西。
#在根目录下创建python/app文件夹
mkdir -p ~/python ~/python/myapp
myapp 目录将映射为 python 容器配置的应用目录。
进入创建的 python 目录,创建 Dockerfile。
方法一:
docker run -d --name mypython -p 8022:22 -v /automl:/workspace/automl -it python:latest /bin/bash
方法二:
#前提是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
目录为工作目录
进入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账户通过密码登录:
注释掉这行: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了
打开VS code,在扩展栏(或者按ctr+shift+X)查找安装Remote Development
安装完成后需要reload一下,然后按ctr+shift+p,打开查找栏,输入remote-ssh,选择open Configuration file
Host随便起名字,这里我用AutoML_docker命名。在HostName的地方输入服务器的ip,注意端口Port是我们之前docker映射到服务器上的端口号。
配置成功后左边会多出一个远程浏览的标签,点开就可以看到刚才配置的远程连接了。点击之后要输入密码,即我们创建docker后修改的root密码。
菜单查看-扩展或者Ctrl + Shift + X,在商店中搜索“Python”,找到“适Python extension for Visual Studio Code”安装在服务器docker中,然后重启VSCode。
之后,菜单查看-命令面板或者Ctrl + Shift + P,输入“python: select interpreter”,点击选择解析器,稍等几秒钟,就会列出在系统中找到的Python环境(Python环境要加入环境变量才能被找到),点击需要的python解析器即可。
出现找不到python的原因,很有可能是版本没装对。
应该是红框里的这个
打开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常用的调试配置有:
Ok,至此配置VScode就结束了,可以选择刚才配置的解释器来逐行调试docker内的代码了。因为docker的代码是通过-v与服务器同步的,所以修改后也会直接改动服务器上存的代码,大家git的时候就只需要在服务器端设置,而不用在docker内再考虑这个问题了。
#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说明:
–基于新镜像运行容器
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端口启动后就可以进行远程 连接了。
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端口启动后就可以进行远程 连接了。
docker port 18f89ebd83aa
#查看docker ID为18f89ebd83aa的容器开放端口
[外链图片转存中…(img-irvubaS6-1637643489541)]
22是容器端口;
0.0.0.0:8022是22映射到宿主机上的端口。
参考:[https://blog.csdn.net/lifengss/article/details/105300459]