【Python系列】Python 项目 Docker 部署指南

CSDN 2024-07-23 13:35:22 阅读 52

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

img

推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航

檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

一.基础介绍1. Docker 简介2. 环境准备3. 创建 Dockerfile4. 构建 Docker 镜像5. 运行 Docker 容器6. 访问应用7. 数据持久化8. 容器管理9. Docker Compose

二.实现步骤1.Dockerfile2.base_run.sh3.启动脚本

三.总结

随着容器化技术的兴起,Docker 成为了一种流行的应用部署方式。它通过将应用及其依赖环境打包在一起,解决了"在我机器上可以运行"的问题,使得应用能够在任何支持 Docker 的环境中无缝运行。本文将详细介绍如何将 Python 项目部署到 Docker 容器中。

在这里插入图片描述

一.基础介绍

1. Docker 简介

Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中。Docker 使用 Linux 容器(LXC)技术,但提供了比传统容器更加易用的工作流和用户界面。

2. 环境准备

在开始之前,请确保你的开发机器上已经安装了 Docker。你可以访问 Docker 官网下载并安装适合你操作系统的 Docker 版本。

3. 创建 Dockerfile

Dockerfile 是一个文本文件,包含了一系列的指令,用于自动化构建 Docker 镜像。以下是一个基本的 Python 项目的 Dockerfile 示例:

<code># 使用官方 Python 运行时作为父镜像

FROM python:3.8-slim

# 设置工作目录

WORKDIR /app

# 将当前目录内容复制到工作目录

COPY . /app

# 安装依赖

RUN pip install --no-cache-dir -r requirements.txt

# 暴露端口

EXPOSE 8000

# 运行应用

CMD ["python", "app.py"]

4. 构建 Docker 镜像

在 Dockerfile 所在的目录下打开终端,运行以下命令来构建 Docker 镜像:

docker build -t my-python-app .

这里 -t 参数用于给镜像指定一个标签,. 表示 Dockerfile 在当前目录。

5. 运行 Docker 容器

使用以下命令从镜像启动一个容器:

docker run -d -p 8000:8000 my-python-app

-d 参数表示后台运行容器,-p 参数用于端口映射,将容器的 8000 端口映射到宿主机的 8000 端口。

6. 访问应用

如果一切顺利,你现在可以通过浏览器访问 http://localhost:8000 来查看运行在 Docker 容器中的 Python 应用。

7. 数据持久化

在某些情况下,你可能需要持久化应用数据。Docker 提供了数据卷(volumes)来实现这一点。你可以使用以下命令来运行容器并挂载数据卷:

docker run -d -p 8000:8000 -v my-data:/app/data my-python-app

这里 -v 参数用于创建一个数据卷并将其挂载到容器内的 /app/data 目录。

8. 容器管理

Docker 提供了一系列命令来管理容器,例如:

docker ps:列出正在运行的容器。docker stop <container_id>:停止指定的容器。docker start <container_id>:启动已停止的容器。docker logs <container_id>:查看容器的日志。

9. Docker Compose

对于复杂的应用,你可能需要同时运行多个容器。Docker Compose 允许你通过一个 YAML 文件来定义多个容器的配置,然后使用一个命令来启动或停止它们。创建一个 docker-compose.yml 文件:

version: "3"

services:

web:

build: .

ports:

- "8000:8000"

redis:

image: "redis:alpine"

使用以下命令启动所有服务:

docker-compose up -d

二.实现步骤

1.Dockerfile

FROM python:3.11.5-slim

WORKDIR /kg-qa/

COPY .env .env

COPY ./base ./base

COPY ./manager ./manager

COPY ./config/config.yaml ./config/config.yaml

COPY ./config/logger.ini ./config/

COPY ./base_run.sh ./ServerApp.py ./__init__.py ./

COPY ./requirements.txt ./requirements.txt

# 安装 Python 依赖

RUN pip install --upgrade pip

RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 将应用代码复制到工作目录

COPY . /kg-qa/

ENTRYPOINT ["sh", "./base_run.sh"]

2.base_run.sh

#!/bin/sh

uvicorn ServerApp:app --host 0.0.0.0 --port 8080 --loop asyncio

3.启动脚本

#!/bin/sh

# 定义镜像名称和标签

IMAGE_NAME="kg-qa:latest"code>

CONTAINER_NAME="kg-qa"code>

# 切换到项目目录

cd /data/kg/kg-qa

# 切换到开发分支并拉取最新代码

echo "Checking out to development branch and pulling latest changes..."

git checkout dev

git pull

# 构建Docker镜像

echo "Building Docker image..."

docker build -t $IMAGE_NAME .

# 检查容器是否正在运行

if docker ps -a | grep -q $CONTAINER_NAME; then

echo "Stopping and removing existing container..."

docker stop $CONTAINER_NAME

docker rm $CONTAINER_NAME

fi

# 启动Docker容器

echo "Starting container..."

docker run -d \

--name $CONTAINER_NAME \

-p 8080:8080 \

--restart=always \

--privileged=true \

-e TZ=Asia/Shanghai \

-v /etc/localtime:/etc/localtime:ro \

-v /data/kg/config/env.properties:/kg-qa/.env \

-v /data/kg/config:/kg-qa/config \

$IMAGE_NAME

echo "Container started successfully!"

# 打印容器日志

echo "Container logs:"

docker logs -f $CONTAINER_NAME

在这里插入图片描述

三.总结

Docker 为 Python 项目提供了一种快速、一致且可移植的部署方式。通过本文的介绍,你应该已经了解了如何将 Python 项目部署到 Docker 容器中。ocker 的世界非常广阔,本文只是冰山一角,还有许多高级特性去探索和学习。

觉得有用的话点个赞 <code>👍🏻 呗。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。