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

news2024/11/24 16:38:55

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

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

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

博客目录

    • 一.基础介绍
      • 1. Docker 简介
      • 2. 环境准备
      • 3. 创建 Dockerfile
      • 4. 构建 Docker 镜像
      • 5. 运行 Docker 容器
      • 6. 访问应用
      • 7. 数据持久化
      • 8. 容器管理
      • 9. Docker Compose
    • 二.实现步骤
      • 1.Dockerfile
      • 2.base_run.sh
      • 3.启动脚本
    • 三.总结

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

一.基础介绍

1. Docker 简介

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

2. 环境准备

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

3. 创建 Dockerfile

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

# 使用官方 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"
CONTAINER_NAME="kg-qa"

# 切换到项目目录
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 的世界非常广阔,本文只是冰山一角,还有许多高级特性去探索和学习。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

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

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

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1879257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop3:MapReduce中的ETL(数据清洗)

一、概念说明 “ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;、加载&#xff08;Load&#xff09;至目的端的过程。ETL一词较常用在数据仓库&#…

bgr24包装为bmp图像

code void BGR24ToBMP(const int width, const int height, uint8_t *framedata, const char *outfile) {BITMAPFILEHEADER bmp_header; // 声明BMP文件的头结构BITMAPINFOHEADER bmp_info; // 声明BMP文件的信息结构unsigned int data_size (width * 3 3) / 4 * 4 * heig…

springboot系列六: springboot底层机制实现 下

实现SpringBoot底层机制[Tomcat启动分析 Spring容器初始化 Tomcat如何关联Spring容器] 实现任务阶段1-创建Tomcat, 并启动&#x1f966;说明&#xff1a;创建Tomcat, 并启动&#x1f966;分析代码实现&#x1f966;完成测试 实现任务阶段2-创建Spring容器&#x1f966;说明&a…

isdigit()方法——判断字符串是否只由数字组成

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 isdigit()方法用于判断字符串是否只由数字组成。isdigit()方法的语法格式如下&#xff1a; str.isdigit() 如果字符串只包含数字则返回T…

路径规划 | 基于蜣螂优化算法的栅格地图机器人路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 路径规划 | 基于蜣螂优化算法的栅格地图机器人路径规划&#xff08;Matlab&#xff09; 1.利用蜣螂算法DBO优化栅格地图机器人路径规划&#xff0c;效果如图所示&#xff0c;包括迭代曲线图、栅格地图等等&#xff5e…

014、Flask模板在数据可视化中的深度应用

目录 Flask模板在数据可视化中的深度应用 1. Flask模板系统简介 1.1 Jinja2模板语法基础 1.2 Flask中渲染模板 2. 静态图表生成 2.1 使用Matplotlib生成图表 3. 交互式图表&#xff1a;使用Charts.js 3.1 创建柱状图 3.2 创建折线图 4. 高级交互式可视化&#xff1a;…

记某次攻防演练:大战UEditor并突破

前言 最近参与某次攻防演练&#xff0c;通过前期信息收集&#xff0c;发现某靶标单位存在某域名备案。 通过fofa搜索子域名站点&#xff0c;发现存在一个子域名的61000端口开放着一个后台&#xff0c;于是开始进行渗透。 目录扫描 进行目录扫描吗&#xff0c;发现/bin.rar路径…

Vue3实现点击按钮实现文字变色

1.动态样式实现 1.1核心代码解释&#xff1a; class"power-station-perspective-item-text"&#xff1a; 为这个 span 元素添加了一个 CSS 类&#xff0c;以便对其样式进行定义。 click"clickItem(item.id)"&#xff1a; 这是一个 Vue 事件绑定。当用户点…

Springboot与xxl-job

一、下载xxl-job项目 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 从GitHub上面将项目clone下来&#xff0c;如果网络问题导致速度慢也可以从Gitee上面拉…

Apache POI Excel 处理最佳实践

1、需求背景 问题的背景是在需求设计的时候 &#xff0c;我们在业务专家的配合下设计了一些表&#xff0c;但是为了方便的和他们讨论我们把表结构的描述通过Excel文件的方式记录了下来&#xff0c;然后我们需要根据excel文件中的内容生成对应的DDL。今天就给大家分享一下我们的…

python-求出 e 的值

[题目描述] 利用公式 e11/1!1/2!1/3!⋯1/&#x1d45b;!&#xff0c;求 e 的值&#xff0c;要求保留小数点后 10 位。输入&#xff1a; 输入只有一行&#xff0c;该行包含一个整数 n&#xff0c;表示计算 e 时累加到1/n!。输出&#xff1a; 输出只有一行&#xff0c;该行包含计…

解锁数据资产的无限潜能:深入探索创新的数据分析技术,挖掘其在实际应用场景中的广阔价值,助力企业发掘数据背后的深层信息,实现业务的持续增长与创新

目录 一、引言 二、创新数据分析技术的发展 1、大数据分析技术 2、人工智能与机器学习 3、可视化分析技术 三、创新数据分析技术在实际应用场景中的价值 1、市场洞察与竞争分析 2、客户细分与个性化营销 3、业务流程优化与风险管理 4、产品创新与研发 四、案例分析 …

单片机的学习(15)--LCD1602

LCD1602 14.1LCD1602的基础知识1.LCD1602介绍2.引脚及应用电路3.内部结构框图4.时序结构5.LCD1602指令集6.字符值7.LCD1602操作流程 14.2LCD1602功能函数代码1.显示一个字符&#xff08;1&#xff09;工程目录&#xff08;2&#xff09;main.c函数&#xff08;3&#xff09;LCD…

mysql8.0-学习

文章目录 mysql8.0基础知识-学习安装mysql_8.0登录mysql8.0的体系结构与管理体系结构图连接mysqlmysql8.0的 “新姿势” mysql的日常管理用户安全权限练习查看用户的权限回收:revoke角色 mysql的多种连接方式socket显示系统中当前运行的所有线程 tcp/ip客户端工具基于SSL的安全…

error: Sandbox: rsync.samba in Xcode project

在Targets 的 Build Settings 搜索&#xff1a;User script sandboxing 设置为NO

什么是TOGAF?TOGAF应用场景有哪些?TOGAF优缺点

一、什么是TOGAF&#xff1f; TOGAF&#xff0c;全称The Open Group Architecture Framework&#xff0c;即开放组体系结构框架&#xff0c;是由国际开放标准组织The Open Group制定的一套企业架构&#xff08;Enterprise Architecture, EA&#xff09;框架。 The TOGAF Libra…

Mysql基本知识点

1.数据库的基本操作 显示当前的数据库 show databases;创建一个数据库 直接创建数据库 create database 数据库名字;如果系统没有 test2 的数据库&#xff0c;则创建一个名叫 test2 的数据库&#xff0c;如果有则不创建 create database if not exists test2;如果系统没有 db…

在navicat对mysql声明无符号字段

1.无符号设置 在 MySQL 中&#xff0c;我们可以使用 UNSIGNED 属性来设置列的无符号属性&#xff0c;这意味着该列只能存储非负整数值。对于一些需要存储正整数的列&#xff0c;比如年龄、数量等&#xff0c;使用 UNSIGNED 属性可以提高数据存储和查询的效率&#xff0c;并且能…

【启明智显分享】乐鑫ESP32-S3R8方案2.8寸串口屏:高性能低功耗,WIFI/蓝牙无线通信

近年来HMI已经成为大量应用聚焦的主题&#xff0c;在消费类产品通过创新的HMI设计带来增强的连接性和更加身临其境的用户体验之际&#xff0c;工业产品却仍旧在采用物理接口。这些物理接口通常依赖小型显示器或是简单的LED&#xff0c;通过简单的机电开关或按钮来实现HMI交互。…

【云原生】Prometheus 使用详解

目录 一、前言 二、服务监控概述 2.1 什么是微服务监控 2.2 微服务监控指标 2.3 微服务监控工具 三、Prometheus概述 3.1 Prometheus是什么 3.2 Prometheus 特点 3.3 Prometheus 架构图 3.3.1 Prometheus核心组件 3.3.2 Prometheus 工作流程 3.4 Prometheus 应用场景…