文章目录
- 摘要
- 项目结构
- 项目开发
- 项目上线
- 参考文章
摘要
本文介绍了如何在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.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
-
-
创建应用
在项目中创建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上线项目