基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署
文章目录
- 摘要
- 项目结构
- 项目开发
- 项目上线
- 参考文章

摘要
本文介绍了如何在Windows 10系统上使用PyCharm专业版2024.1,通过Docker容器在阿里云CentOS 7.9服务器上进行Python项目的开发和生产部署。文章详细阐述了项目结构的搭建、PyCharm的使用技巧、以及如何将开发项目部署为生产镜像,并利用Pycharm和容器卷挂载技术实现项目结构和内容在本地、远程服务器、Docker容器内部的一致性。文章有助于读者更好地理解和实践在Windows系统上使用PyCharm连接Docker容器进行Python项目开发与部署。
项目结构
假设你的项目名称为 flask_project,项目结构如下:
flask_project/
│
├── DockerfileBase # 基础 Dockerfile,用于构建开发环境
├── DockerfileProd # 生产环境 Dockerfile,基于基础镜像
├── app/
│ ├── __init__.py
│ ├── app.py # Flask 应用的主文件
├── requirements.txt # 项目依赖文件
└── README.md # 项目说明文件
-
DockerfileBase:
在项目的根目录下创建一个名为
DockerfileBase的文件,并写入以下内容:# 使用官方 Python 3.8 镜像 FROM python:3.8# 安装设置ssh服务 RUN apt-get update && \apt-get install -y openssh-server openssh-client && \echo root:abcdef123456 | chpasswd && \echo "PermitRootLogin yes" >> /etc/ssh/sshd_config # 创建并设置权限 RUN mkdir -p /run/sshd && \chown root:root /run/sshd && \chmod 755 /run/sshd# 安装必要的软件包 RUN apt-get install -y sudo vim# 设置系统时区为上海 RUN rm -f /etc/localtime RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone# 暴露 SSH 端口 EXPOSE 22# 启动 SSH 服务 CMD ["/usr/sbin/sshd", "-D"] -
DockerfileProd:
在项目的根目录下创建一个名为
DockerfileProd的文件,并写入以下内容:# 使用自己构建 Python 3.8 镜像作为基础镜像 FROM python-3.8-base:1.0# 设置容器内的工作目录为 /opt/project/flask_project WORKDIR /opt/project/flask_project# 将当前目录下的所有文件复制到容器的工作目录 COPY . /opt/project/flask_project# 安装 Flask 应用所需的依赖 RUN pip install --no-cache-dir -r requirements.txt# 暴露 Flask 应用运行的端口 5000 EXPOSE 5000# 定义容器启动时执行的命令来运行 Flask 应用 CMD ["python", "./app.py"] -
app/app.py:
在
app目录下创建一个名为app.py的文件,并写入以下 Flask 应用代码:from flask import Flaskapp = Flask(__name__)@app.route('/') def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000) -
app/requirements.txt:
在
app目录下创建一个名为requirements.txt的文件,并写入以下内容:Flask==3.0.3 -
README.md:
在
README.md写入项目相关的说明:基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署
项目开发
-
构建基础镜像
首先,你需要创建一个基础的 Docker 镜像,这个镜像将包含你开发环境中所需的所有基本组件。- 登录远程服务器
- 新建
DockerfileBase文件mkdir /opt/project/flask_project touch DockerfileBase - 写入以下内容到
DockerfileBase# 使用官方 Python 3.8 镜像 FROM python:3.8# 安装设置ssh服务 RUN apt-get update && \apt-get install -y openssh-server openssh-client && \echo root:abcdef123456 | chpasswd && \echo "PermitRootLogin yes" >> /etc/ssh/sshd_config # 创建并设置权限 RUN mkdir -p /run/sshd && \chown root:root /run/sshd && \chmod 755 /run/sshd# 安装必要的软件包 RUN apt-get install -y sudo vim# 设置系统时区为上海 RUN rm -f /etc/localtime RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone# 暴露 SSH 端口 EXPOSE 22# 启动 SSH 服务 CMD ["/usr/sbin/sshd", "-D"] - 构建基础镜像
docker build -f DockerfileBase -t python-3.8-base:1.0 .
-
运行开发环境容器
使用基础镜像运行开发环境容器,并映射必要的端口。docker run -d \--name python-dev \-p 5000:5000 \-p 10022:22 \-v /opt/project/flask_project:/opt/project/flask_project \python-3.8-base:1.0 -
Pycharm新建本地项目
在 PyCharm 中创建一个新的项目:- 点击 “File”(文件)> “New Project”(新建项目)
- 项目名称:flask_project
- 项目位置:E:\opt\project
- Python 虚拟环境位置:E:\opt\project\flask_project\.venv

- 注意:Python虚拟环境不重要,下面会修改Python解析器为远程服务器Docker容器解释器。
-
Pycharm远程连接开发容器
- 配置远程解释器
-
填写配置信息如下
配置项 值 Host(主机地址) your-service-ip Port(端口) 10022 Username(用户名) root Password(密码) abcdef123456 Sync Folder(文件同步目录) /opt/project/flask_project -
配置过程截图如下

-
- 修改项目同步配置
移除E:\opt\project\flask_project\.venv向服务器同步


- 配置远程解释器
-
安装项目依赖
-
登录远程容器服务器
Pycharm中点击Terminal, 出现终端后点击向下三角, 出现上面配置的远程解释器所在服务器信息, 选择进入服务器。

-
创建
requirements.txtcd /opt/project/flask_project touch requirements.txt -
写入以下内容
Flask==3.0.3 -
安装项目依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
-
-
创建应用
在项目中创建Flask应用目录app/和文件app.py-
项目结构如下:
flask_project/ │ ├── DockerfileBase # 基础 Dockerfile,用于构建开发环境 ├── app/ │ ├── __init__.py │ ├── app.py # Flask 应用的主文件 └── requirements.txt # 项目依赖文件 -
文件内容
写入以下内容到app/app.py中from flask import Flaskapp = Flask(__name__)@app.route('/') def hello_world():return 'Hello, World!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)如下图所示

-
运行应用
在 PyCharm 中右键运行 app.py 文件。

-
-
访问应用
- 访问
http://<server-ip>:5000来查看 Flask 应用的输出。

- 访问
项目上线
-
构建生产镜像
首先,你需要创建一个生产的 Docker 镜像,这个镜像将包含你开发环境中所需的所有基本组件。- 登录远程服务器
- 新建
DockerfileProd文件mkdir /opt/project/flask_project touch DockerfileProd - 写入以下内容到
DockerfileProd# 使用自己构建 Python 3.8 镜像作为基础镜像 FROM python-3.8-base:1.0# 设置容器内的工作目录为 /opt/project/flask_project WORKDIR /opt/project/flask_project# 将当前目录下的所有文件复制到容器的工作目录 COPY . /opt/project/flask_project# 安装 Flask 应用所需的依赖 RUN pip install --no-cache-dir -r requirements.txt# 暴露 Flask 应用运行的端口 5000 EXPOSE 5000# 定义容器启动时执行的命令来运行 Flask 应用 CMD ["python", "./app.py"] - 构建基础镜像
docker build -f DockerfileProd -t flask-project-python-3.8:1.0 .
-
运行容器
使用生产镜像运行生产环境容器,并映射必要的端口。docker run -d \--name flask-project-prod \-p 10000:5000 \flask-project-python-3.8:1.0 -
访问应用
访问http://<server-ip>:10000来查看 Flask 应用的输出。 -
重启、停止和删除容器:
当你希望重启停止并删除容器时,可以使用以下命令:
# 重启容器 docker restart flask-prod-prod # 停止容器 docker stop flask-prod-prod # 删除容器 docker rm flask-project-prod
参考文章
Dockerfile 简介与 镜像构建指南
pycharm 远程连接docker容器调试程序
pycharm如何连接远程服务器的docker容器进行运行和调试代码(一)
PyCahrm部署Docker镜像解释器
Flask+Gunicorn+Docker最佳实践
Docker+Flask+Gunicorn上线项目
相关文章:
基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署
文章目录 摘要项目结构项目开发项目上线参考文章 摘要 本文介绍了如何在Windows 10系统上使用PyCharm专业版2024.1,通过Docker容器在阿里云CentOS 7.9服务器上进行Python项目的开发和生产部署。文章详细阐述了项目结构的搭建、PyCharm的使用技巧、以及如何将开发项…...
TypeScript学习篇-类型介绍使用、ts相关面试题
文章目录 基础知识基础类型: number, string, boolean, object, array, undefined, void(代表该函数没有返回值)enum(枚举): 定义一个可枚举的对象typeinterface联合类型: |交叉类型: &any 类型null 和 undefinednullundefined never类型 面试题及实战1. 你觉得使用ts的好处…...
超详细!Jmeter性能测试
前言 性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性能的瓶颈所在,而这也是优化架构设计中重要的依据。 测试流程: 需求分析→环境搭建→测试计划→脚…...
C语言经典习题24
文件操作习题 一 编程删除从C盘home文件夹下data.txt文本文件中所读取字符串中指定的字符,该指定字符由键盘输入,并将修改后的字符串以追加方式写入到文本文件C:\home\data.txt中。 #include<stdio.h> main() { char s[100],ch; int i;…...
SQL labs-SQL注入(三,sqlmap使用)
本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言: 盲注简述:是在没有回显得情况下采用的注入方式,分为布尔盲注和时间盲注。 布尔盲注:布尔仅有两种形式,ture&#…...
统一认证与单点登录:简明概述与应用
1. 统一认证概述 统一认证是一种身份验证机制,允许用户使用一个账户来访问多个系统和应用程序。它的主要目标是简化用户的登录过程,提高安全性,并减少管理开销。统一认证通过集中管理用户信息,使得用户只需一次认证即可访问不同的…...
MSPM0G3507学习笔记1:开发环境_引脚认识与点灯
今日速通一款Ti的单片机用于电赛:MSPM0G3507 这里默认已经安装好了Keil5_MDK 首先声明一下: 因为是速成,所以需要一定单片机学习基础,然后我写的也不会详细,这个专栏的笔记也就是自己能看懂就行的目标~~~ 文章提供测试代码解…...
使用法国云手机进行面向法国的社媒营销
在当今数字化和全球化的时代,社交媒体已经成为企业营销和拓展市场的重要工具。对于想进入法国市场的企业来说,如何在海外社媒营销中脱颖而出、抓住更多的市场份额,成为了一个关键问题。法国云手机正为企业提供全新的营销工具,助力…...
C++学习笔记——模板
学习视频 文章目录 模板的概念函数模板函数模板语法函数模板注意事项函数模板案例普通函数与函数模板的区别普通函数与函数模板的调用规则模板的局限性 类模板类模板与函数模板区别类模板中成员函数创建时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板分文件…...
财务分析,奥威BI行计算助力财务解放报表工作
【财务分析,奥威BI行计算助力财务解放报表工作】 在企业的财务管理体系中,财务报表的编制与分析是至关重要的一环。然而,传统的手工编制报表方式不仅耗时耗力,还难以应对日益复杂多变的财务数据需求。奥威BI(Business…...
文件写入、读出-linux
基于linux操作系统,编写存储功能,在网上搜了几个例子,一直报创建错误, fopen(SAVE_PATH_OWN_INF_FILE, "w") fopen(SAVE_PATH_OWN_INF_FILE, "a"), 使用这两个创建均失败,最后发现创建可以用以…...
环境搭建-Windows系统搭建Docker
Windows系统搭建Docker 一、系统虚拟化1.1 启用虚拟化2.2 启用Hyper-v并开启虚拟任务 三、安装WSL3.1 检验安装3.2 安装WSL 四、Docker安装4.1 Docker安装包下载4.2 Docker安装4.3 运行docker Desktop 五、Docker配置5.1 打开Docker配置中心5.2 配置Docker国内镜像 六、使用 一…...
k8s零零散散问题
安装教程 https://blog.csdn.net/weixin_43933728/article/details/137977799 加入集群错误问题 https://blog.csdn.net/Linbling/article/details/139122862...
The Llama 3 Herd of Models.Llama 3 模型论文全文
现代人工智能(AI)系统是由基础模型驱动的。本文提出了一套新的基础模型,称为Llama 3。它是一组语言模型,支持多语言、编码、推理和工具使用。我们最大的模型是一个密集的Transformer,具有405B个参数和多达128K个tokens的上下文窗口。本文对Llama 3进行了广泛的实证评价。我们…...
ChatGPT的原理和成本
ChatGPT就是人机交互的一个底层系统,某种程度上可以类比于操作系统。在这个操作系统上,人与AI之间的交互用的是人的语言,不再是冷冰冰的机器语言,或者高级机器语言,当然,在未来的十来年内,机器语…...
无刷电机的ESC电子速度控制模块夹紧铁芯或更换镇流器
△u/s中后一项经过二极管半波整流、电容C1滤波后,使原有的脉动电压曲线Us上再0.45ys的波形如叠加一个直流电压,其大小为-Lu,即为△U当压差△U太大,使0.45△U≥Ucz时,电容C1两端电压uc不可能降至下信号。所以该电路同样可以检测出压差压差较小时才能发出合闸脉冲。 压差△U的检…...
OpenAI发布AI搜索惨遭翻车?新老搜索的较量愈演愈烈!
引言 在信息爆炸的时代,每一次技术的飞跃都如同海平面上跃起的鲸鱼,既震撼人心,也搅动着深海的宁静。近日,科技巨头OpenAI发布的AI搜索功能,本欲以智能之名重塑搜索领域的版图,却不料遭遇了市场的“暗礁”…...
SpringBoot整合阿里云短信业务
详细介绍SpringBoot整合阿里云短信服务的每一步过程,同时会将验证码存放到Redis中并设置过期时间,尽量保证实战的同时也让没做过的好兄弟也能实现发短信的功能~ 1. 注册阿里云账号和创建Access Key 首先,你需要注册一个阿里云账号࿰…...
Kubernetes安全--securityContext介绍
作者:雅泽 securityContext是用来控制容器内的用户权限,你想用什么用户去执行程序或者执行操作等等。 1. securityContext介绍 安全上下文(Security Context)定义 Pod 或 Container 的特权与访问控制设置。 安全上下文包括但不…...
【React】通过实际示例详解评论列表渲染和删除
文章目录 一、引言二、初始状态与状态更新1. 使用useState钩子管理状态2. 评论列表的初始数据 三、列表渲染的实现1. list.map(item > { ... })2. return 语句3. JSX 语法4. 为什么这样设计5. 完整解读 四、列表项的唯一标识1. key 的作用2. key 的用法3. 可以没有 key 吗&a…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...
联邦学习带宽资源分配
带宽资源分配是指在网络中如何合理分配有限的带宽资源,以满足各个通信任务和用户的需求,尤其是在多用户共享带宽的情况下,如何确保各个设备或用户的通信需求得到高效且公平的满足。带宽是网络中的一个重要资源,通常指的是单位时间…...
运动控制--BLDC电机
一、电机的分类 按照供电电源 1.直流电机 1.1 有刷直流电机(BDC) 通过电刷与换向器实现电流方向切换,典型应用于电动工具、玩具等 1.2 无刷直流电机(BLDC) 电子换向替代机械电刷,具有高可靠性,常用于无人机、高端家电…...
