基于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…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
