【Python程序开发系列】教你使用Docker部署一个简单的Python应用程序(案例+源码)

这是我的第313篇原创文章。

一、引言

Docker 对于程序员来说,其实和Git差不多,基本上属于一个必备工具。如果你想使用这个工具,你就必须安装这个应用工具,至于在不同操作系统上安装Docker的方式网上有很多教程,这里不做赘述。

- 安装docker
    - 若想在本地windows环境运行,就得在windows中安装docker,分为桌面版和内核版
    - 若想在远程服务器Linux环境运行镜像,就得在Linux中安装docker,分为桌面版和内核版

我在E盘有一个名为docker-test的python项目,docker-test就是这个项目的根文件夹:

图片

docker-test文件下有一个app包,包下面有一个python脚本hello.py,接下来简要说明如何将这个项目使用docker进行部署,运行这个项目(这里就是运行这个脚本)。

图片

这个脚本实现的功能是一个请求百度官网并打印出请求内容。

图片

二、使用Docker部署应用(Windows环境)

2.1 生成requirement.txt

项目应用程序中需要依赖一些Python库,为了方便在docker上进行安装,所以将需要的库整合到requirement.txt中。

在终端中进入到项目目录下,执行下面的命令,生成requirement.txt

pip freeze > requirements.txt

或者安装pipreqs,pip install pipreqs,执行pipreqs .,在docker-test文件下后会生成一个requirements.txt文件

图片

2.2 创建Dockerfile

在docker-test文件夹下新建一个Dockerfile文件,与app文件夹同级,然后编辑Dockerfile文件:

FROM python:3.9.6  # 设置基于的python基础镜像
ADD . E:/docker-test # 将代码程序添加到E:/docker-test文件夹
WORKDIR E:/docker-test # 设置E:/docker-test文件夹是docker工作目录
RUN pip install -r requirements.txt # 安装程序依赖包
CMD ["python", "app/hello.py"] # 执行python项目主程序

2.3 创建镜像

如果要部署到其他服务器,可以先将项目(docker-test文件夹)上传到服务器,然后创建镜像:

docker build -t imagename Dockerfilepath
# docker build -t demo_f:v0 .

默认情况下,Docker镜像存储在Docker引擎的默认存储位置。在Windows上,它通常位于C:\ProgramData\Docker\windowsfilter目录下。在这个目录中,你可以找到以哈希值命名的文件夹,每个文件夹对应一个镜像。在Windows上,如果你使用的是Docker Desktop(Docker for Windows),默认情况下,镜像存储在WSL 2的虚拟机文件系统中。 

命令运行之后本地就会生成一个镜像,在docker desktop里面就可以看到:

图片

内核版需要命令查看:

docker images

图片

接下来可以将上传到服务器,在服务器运行镜像即可;也可以将镜像上传到docker hub,进行拉取镜像,修改镜像等操作

2.4 启动容器

启动容器就是运行镜像,也就是运行项目的主程序

桌面版本直接点击运行:

图片

内核版需要敲命令行:

docker run demo_f:v0

图片

本文详细讲解了python程序部署到docker,一步一截图,超级详细,不会的小伙伴,自觉动手练习!!!!

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

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

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

相关文章

每天五分钟深度学习:解决for循环效率慢的关键在于向量化

本文重点 上一节课程中,我们学习了多样本的线性回归模型,但是我们的伪代码实现中使用了大量的for循环,这样代码的问题是效率很低。为了克服这一瓶颈,向量化技术应运而生,成为提升程序执行效率、加速数据处理速度的重要手段。 向量化技术概述 向量化(Vectorization)是…

MySQL-核心知识要点

1、索引的数据结构-Btree BTree的优势: B树的内节点无data,一个节点可以存储更多的K-V对。在构造树时,需要的内节点会更少,那么树的层级也会越低。查询一条数据时,1. 扫描的层级低,扫描过的节点更少&…

【netty系列-04】反应堆模式的种类和具体实现

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

数字化转型中,数字化如何重塑中小企业发展力?

引言:当前,我国中小微企业数字化转型处于“不平衡、不充分、不规范”阶段,普遍面临“不会转”“不能转”“不敢转”的困境。数字化转型可以帮助企业突破这些困境,实现更大的发展。更进一步,数字化转型是中小企业高质量…

学习笔记——动态路由——IS-IS中间系统到中间系统(基本概念)

二、IS-IS基本概念 1、IS-IS概述 IS-IS是ISO定义的OSI协议栈中的无连接网络服务(ConnectionLess Network Service,CLNS)的一部分,IS-IS是一种链路状态路由协议,IS-IS与OSPF在许多方面非常相似,例如,运行IS-IS协议的直…

4.BeanFactory

可以看出BeanFactory表面上只有getBean相关的方法。 实际上控制反转、基本的依赖注入、Bean的生命周期的各种功能,都是由BeanFactory的实现类来实现的。(DefaultListableBeanFactory) DefaultListableBeanFactory管理单例对象DefaultSinglet…

杨万里,诚斋体的开创者

杨万里,字廷秀,号诚斋,生于南宋绍兴元年(公元1127年),卒于南宋庆元二年(公元1206年),享年79岁。在中国古代文学的璀璨星河中,南宋诗人杨万里以其清新脱俗、贴…

Android- Framework 非Root权限实现修改hosts

一、背景 修改system/etc/hosts,需要具备root权限,而且remount后,才能修改,本文介绍非root状态下修改system/etc/hosts方案。 环境:高通 Android 13 二、方案 非root,system/etc/hosts只有只读权限&…

机器学习python实践——关于管道模型Pipeline和网格搜索GridSearchCV的一些个人思考

最近在利用python跟着指导书进行机器学习的实践,在实践中使用到了Pipeline类方法和GridSearchCV类方法,并且使用过程中发现了一些问题,所以本文主要想记录并分享一下个人对于这两种类方法的思考,如果有误,请见谅&#…

【微服务】微服务之Feign 与 Ribbon

文章目录 强烈推荐引言优点Feign示例什么是Ribbon?Ribbon 的优点Netflix Feign 和 Ribbon整合Feign 与 Ribbon 的关系Feign 与 Ribbon 结合使用的示例配置文件(application.yml)说明: Feign 与 Ribbon 结合使用的应用场景1. 动态服…

物联网的技术和应用有哪些?

随着科技的飞速发展,物联网已经成为连接世界的重要纽带,塑造着我们未来的生活。我们一起深入探索物联网的前沿技术和前瞻性应用,一窥未来的可能性。 获取物联网解决方案,YesPMP平台一站式物联网开发服务。 提示:智慧家…

图形的搭建

例一: 输入描述: 多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。 输出描述: 针对每行输入,输出用“*”组成的X形图案。 示例一&…

爬数据是什么意思?

爬数据的意思是:通过网络爬虫程序来获取需要的网站上的内容信息,比如文字、视频、图片等数据。网络爬虫(网页蜘蛛)是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。 学习一些爬数据的知识有什么用呢&#x…

IPIDEA代理IP助力高效数据采集

IPIDEA代理IP助力高效数据采集 文章目录 IPIDEA代理IP助力高效数据采集📑前言一、爬虫数据采集痛点二、代理IP解决爬虫痛点2.1 为什么可以2.2 选择代理IP的关键因素 三、IPIDEA海外IP代理的优势3.1 IPIDEA的显著优势3.2 IPIDEA的代理类型及应用 四、IPIDEA爬虫实战4…

Fragment+Viewpage2+FragmentStateAdapter实现滑动式标签布局

大家好,我是网创有方,今天记录下标签布局的实现方法,先看下效果图。 第一步:编写一个activity或者fragment。内含有一个viewpager2的适配器,适配器类型为FragmentStateAdapter。 ​ public class MediaCreateFragment…

VideoView视频组件

简介 VideoView 在Android中是一个用户界面组件,它允许开发者在Android设备的屏幕上播放视频文件。它是Android SDK的一部分,位于android.widget包中。VideoView提供了一种简单的方法来嵌入和控制视频播放,包括设置视频源、开始、暂停、 seek…

CV每日论文--2024.6.27

1、Text-Animator: Controllable Visual Text Video Generation 中文标题:Text-Animator:可控视觉文本视频生成 简介:视频生成是各行业中具有重要价值但同时也极具挑战性的任务,例如在游戏、电子商务和广告领域。在文本到视频(T2V)生成中,一…

前端Bug 修复手册

1.前端长整数精度丢失问题 (1)问题 在前后端联调时,发现后端有一个接口返回的值和前端页面上展示的值不一致。 后端Java实现的接口如下,返回一个json格式的大整数 123456789123456789: 但是前端请求这个接口后&…

Spring每日面试题(day1)

目录 JavaWeb三大组件依赖注入的方式Autowire和Resurce有什么区别?Spring Boot的优点Spring IoC是什么?说说Spring Aop的优点Component和Bean的区别自定义注解时使用的RetentionPolicy枚举类有哪些值?Spring Boot自动装配原理Spring MVC工作原…

Charles抓包工具系列文章(三)-- 接口映射工具(Map Remote和Map Local)

一、背景 前文的http请求都是静态的,像compose a new request,仅适用于接口的自测。 回放repeat 一个 http 请求,也无法做到动态调试。 这里的动态还是静态,是站在客户端的角度,数据是实时的,可调试的。 …