-
跳转到家目录
cd
-
创建pythonsshdockerfile
mkdir pythonsshdockerfile
-
跳转pythonsshdockerfile
cd pythonsshdockerfile
-
创建Dockerfile文件
vim Dockerfile
-
将Dockerfile的指令复制到文件中
# 使用 python:latest 作为基础镜像
# 如果我的镜像列表中没有python:latest镜像,在执行Dockerfile的时候,会自动拉取
FROM python:latest
# 更新系统并安装 SSH 服务
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
# 设置 root 用户密码
RUN echo 'root:root' | chpasswd
# 允许 root 用户通过 SSH 登录
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH 服务监听端口
EXPOSE 22
# 启动 SSH 服务
# 在前台执行sshd的指令,如果前台的进程消失,那么容器自动进入exited
CMD ["/usr/sbin/sshd", "-D"]
-
根据Dockerfile创建新的镜像
docker build -t python-ssh:2.0 .
-
查看镜像
docker images
要让 python:latest
Docker 镜像允许 SSH 远程连接,你可以按照以下步骤操作:
1. 创建 Dockerfile
首先,你需要创建一个 Dockerfile
来基于 python:latest
镜像构建一个新的镜像,该镜像会安装 SSH 服务并进行相应配置。
# 使用 python:latest 作为基础镜像
# 如果我的镜像列表中没有python:latest镜像,在执行Dockerfile的时候,会自动拉取
FROM python:latest
# 更新系统并安装 SSH 服务
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
# 允许 root 用户通过 SSH 登录
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH 服务监听端口
EXPOSE 22
# 启动 SSH 服务
# 在前台执行sshd的指令,如果前台的进程消失,那么容器自动进入exited
CMD ["/usr/sbin/sshd", "-D"]
解释:
-
FROM python:latest
:指定基础镜像为python:latest
。 -
RUN apt-get update && apt-get install -y openssh-server
:更新系统并安装 SSH 服务。 -
RUN mkdir /var/run/sshd
:创建 SSH 服务所需的运行目录。 -
RUN echo 'root:password' | chpasswd
:设置root
用户的密码为password
,你可以根据需要修改。 -
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
:修改 SSH 配置文件,允许root
用户通过 SSH 登录。 -
EXPOSE 22
:声明容器将监听 22 端口(SSH 默认端口)。 -
CMD ["/usr/sbin/sshd", "-D"]
:启动 SSH 服务。
2. 构建镜像
在包含 Dockerfile
的目录下,使用以下命令构建新的镜像:
docker build -t python-ssh:latest .
解释:
-
docker build
:用于构建 Docker 镜像。 -
-t python-ssh:latest
:指定镜像的标签为python-ssh:latest
。 -
.
:指定Dockerfile
所在的上下文路径为当前目录。
3. 运行容器
使用以下命令运行新构建的镜像:
docker run -d -p 2222:22 python-ssh:latest
解释:
-
docker run
:用于运行 Docker 容器。 -
-d
:以守护进程模式运行容器。 -
-p 2222:22
:将宿主机的 2222 端口映射到容器的 22 端口。 -
python-ssh:latest
:指定要运行的镜像。
4. 远程连接
现在,你可以使用 SSH 客户端从宿主机远程连接到容器:
ssh root@localhost -p 2222
当提示输入密码时,输入之前在 Dockerfile
中设置的密码(这里是 password
)。
注意事项
-
安全风险:允许
root
用户通过 SSH 登录存在一定的安全风险,建议在生产环境中使用非root
用户进行 SSH 登录。 -
密码管理:建议使用更复杂的密码,并定期更换密码以提高安全性。
使用python-ssh镜像
-
根据该镜像创建容器
-
镜像的端口必须映射到宿主机的,方便window上的工具连接 mx xshell window的终端 vscode,如果没有映射到宿主机,win上的工具就无法连接到这个容器,一般来说我们会将容器的22端口映射到宿主机的222端口,为什么不能直接映射到宿主机的22,因为宿主机的22已经被展鸿
-
建议添加挂载卷,应为docker容器被rm以后,数据都丢失,而挂载卷的中数据会保留在宿主机上
docker run -itd -p222:22 -v /pythonfile:/pytonfile python-ssh:2.0
-p222:22 将容器的22端口映射到宿主机的222端口,当用户访问宿主机的222端口相当于直接访问容器的22端口
-v /pythonfile:/pythonfile 将苏主机上的/pythonfile目录挂载在容器的/pythonfile
挂载的卷的名字 可以不通。-v a:b
在容器或者宿主机上的文件操作,在在宿主机上或者容器上同步共享,也就说,在宿主机上添加文件,在容器内可以查看到,反之亦然
-v a:b a和b两个目录不需要提前创建,docker run指令会自动创建
-
-
设置防火墙
#systemctl disable --now firewalld
systemctrl enable --now firewalld
# 查看已经开放的端口
firewall-cmd --list-ports
# 关闭端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
# 重载
firewall-cmd --reload
# 添加端口
firewall-cmd --zone-public --add-port=222/tcp --permanent
# 重载
firewall-cmd --reload
vscode实现远程开发
-
打开vscode
-
找到左侧边上的 扩展/e xtend,添加组建 remote-ssh
-
添加完成后在vscode的左侧会出现远程资源管理器的工具
-
打开远程资源管理器
-
在指定的文本框中输入 账号,@ ,ip或者域名 : 2222
-
关闭防火墙,在防火墙上打开端口