当前位置: 首页 > news >正文

基于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             # 项目说明文件
  1. 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"]
    
  2. 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"]
    
  3. 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)
    
  4. app/requirements.txt

    app 目录下创建一个名为 requirements.txt 的文件,并写入以下内容:

    Flask==3.0.3
    
  5. README.md

    README.md 写入项目相关的说明:

    基于PyCharm在Windows系统上远程连接Linux服务器中Docker容器进行Python项目开发与部署
    

项目开发

  1. 构建基础镜像
    首先,你需要创建一个基础的 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 .
      
  2. 运行开发环境容器
    使用基础镜像运行开发环境容器,并映射必要的端口。

    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
    
  3. Pycharm新建本地项目
    在 PyCharm 中创建一个新的项目:

    • 点击 “File”(文件)> “New Project”(新建项目)
    • 项目名称:flask_project
    • 项目位置:E:\opt\project
    • Python 虚拟环境位置:E:\opt\project\flask_project\.venv
      在这里插入图片描述
    • 注意:Python虚拟环境不重要,下面会修改Python解析器为远程服务器Docker容器解释器。
  4. Pycharm远程连接开发容器

    • 配置远程解释器
      • 填写配置信息如下

        配置项
        Host(主机地址)your-service-ip
        Port(端口)10022
        Username(用户名)root
        Password(密码)abcdef123456
        Sync Folder(文件同步目录)/opt/project/flask_project
      • 配置过程截图如下
        在这里插入图片描述 在这里插入图片描述

    • 修改项目同步配置
      移除E:\opt\project\flask_project\.venv 向服务器同步
      在这里插入图片描述
      在这里插入图片描述
  5. 安装项目依赖

    • 登录远程容器服务器
      Pycharm中点击Terminal, 出现终端后点击向下三角, 出现上面配置的远程解释器所在服务器信息, 选择进入服务器。
      在这里插入图片描述

    • 创建 requirements.txt

      cd /opt/project/flask_project
      touch  requirements.txt
      
    • 写入以下内容

      Flask==3.0.3
      
    • 安装项目依赖

      pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
      
  6. 创建应用
    在项目中创建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 文件。
      在这里插入图片描述

  7. 访问应用

    • 访问 http://<server-ip>:5000 来查看 Flask 应用的输出。
      在这里插入图片描述

项目上线

  1. 构建生产镜像
    首先,你需要创建一个生产的 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 .
      
  2. 运行容器
    使用生产镜像运行生产环境容器,并映射必要的端口。

    docker run -d \--name flask-project-prod \-p 10000:5000  \flask-project-python-3.8:1.0
    
  3. 访问应用
    访问 http://<server-ip>:10000 来查看 Flask 应用的输出。

  4. 重启、停止和删除容器:

    当你希望重启停止并删除容器时,可以使用以下命令:

    # 重启容器
    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上线项目

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • react组件通信方式
  • 【简单介绍Gitea】
  • 记一次因为在html两个地方引入vue.js导致组件注入失败的问题
  • 算法基础课--学习--第一章
  • 深度学习:如何计算感受野
  • “微软蓝屏”事件,给IT行业带来的宝贵经验和教训
  • Leetcode49. 字母异位词分组(java实现)
  • PHP表单验证邮件和URL
  • PHP数组排序教程
  • C# 抽象工厂模式
  • Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类
  • 当全球银行系统“崩溃”时会发生什么?
  • RocketMQ的详细讲解(四种mq的对比(activeMq、rabbitmq、rocketmq、kafka))
  • 【Android】广播机制
  • 密码暴力破解漏洞2024.7.26
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 4个实用的微服务测试策略
  • Druid 在有赞的实践
  • dva中组件的懒加载
  • Fundebug计费标准解释:事件数是如何定义的?
  • input的行数自动增减
  • Java IO学习笔记一
  • JavaScript DOM 10 - 滚动
  • JSDuck 与 AngularJS 融合技巧
  • JS变量作用域
  • php面试题 汇集2
  • Vim Clutch | 面向脚踏板编程……
  • Vue.js 移动端适配之 vw 解决方案
  • 目录与文件属性:编写ls
  • 前端_面试
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 如何优雅地使用 Sublime Text
  • 源码安装memcached和php memcache扩展
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​学习一下,什么是预包装食品?​
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $(function(){})与(function($){....})(jQuery)的区别
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (九)One-Wire总线-DS18B20
  • (十八)Flink CEP 详解
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • **PHP分步表单提交思路(分页表单提交)
  • .NET C# 使用 iText 生成PDF
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET Framework杂记
  • .net mvc部分视图