基于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 Flask
    
    app = 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 Flask
      
      app = 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上线项目

### PyCharm开发环境配置方法 #### 使用Docker容器PyCharm开发环境 对于希望利用Docker来构建一致性的开发环境而言,在完成必要的前置条件之后,即已经成功安装并设置了Docker以及获取了目标应用的IDE——PyCharm的情况下,可以通过指定的方式让两者协同工作。具体操作为在启动PyCharm时加载对应的项目目录,并确保关联好的Docker映像处于激活状态以便于后续的操作得以顺利开展[^1]。 #### 修改PyCharm启动脚本以适应特定需求 针对某些特殊场景下的配置调整,比如为了使ROS(Robot Operating System)能够更好地同PyCharm集成在一起,可编辑位于`~/.local/share/applications/`或`/usr/share/applications/`目录下代表PyCharm应用程序入口描述符文件中的执行命令部分。通过向原有的`Exec`字段前缀添加`bash -c`指令字符串,使得每次调用该快捷方式都能在一个交互式的shell环境中启动PyCharm实例,从而实现更灵活的功能扩展[^2]。 #### 配置Python解释器用于支持不同版本的需求 考虑到开发者可能会面对多版本共存的情况或是想要尝试最新的特性更新,可以在最新版PyCharm中便捷地切换所使用的Python解析引擎。进入设置菜单后找到关于项目的解释器选项卡,此处提供了直观的选择界面让用户轻松管理本地已有的虚拟环境或者是远程服务器上的资源链接[^3]。 ```python # Python解释器配置示例代码片段 import sys print(f"Current Python Version: {sys.version}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值