基于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…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
