Linux下docker运行python

前言

本机开发环境众多,python版本都好多个,虽然可以通过conda管理多个虚拟环境,但还是不能像容器那样进行进程间的隔离。于是打算试下docker下运行python,而且生产环境很多时候也是用容器来跑应用,环境统一、方便扩容。

云服务器选择

搞个低配版云服务器,做点开发测试啥的非常方便,主要是云服务器支持外网访问。

但是这里还涉及到一个操作系统的选择,windows系统可以傻瓜式操作,但是安装完系统十几个G的磁盘空间就没了,windows系统确实太大了,那还是云服务器厂商给系统瘦身了,自己电脑安装下来都大几十G,根本hold不住。当然因为windows自带操作界面,系统大也是必然。

Linux系统在这方面就很有优势了,不过就是需要命令行操作。我直接选了带docker的镜像,磁盘才占用了3-5个G。而且Linux系统本身对CPU、内存的消耗也更少,这样可以把更多的性能留给应用程序。

于是,我选择了Linux。接下来就是在Linux的世界里探索一番了

实操过程

环境说明

目前我已经有ubuntu+docker的镜像(这个是在初始化云服务器的时候就可以选择对应的镜像,当然初始只有ubuntu系统,手动安装docker也还好)

大体思路

1、先拉取一个python基础镜像

2、然后通过dockerfile构建镜像,安装相关包,同时设置工作目录到宿主机(方便运行程序,而且容器重启了文件也不会丢)

3、运行py文件

docker镜像构建

1、首先拉取一个python3.10的基础镜像(3.10兼容性比较好,不高不低刚刚好)

docker pull python:3.10

2、编写或生成requirements.txt

在需要部署到docker容器的python程序目录cmd执行,自动生成requirements.txt

pip freeze > requirements.txt

不过这样生成出来好多都是python已经安装的包,so也可以自己手动维护requirements.txt 

3、编写dockerfile

Linux远程后默认路径是home/ubuntu(注:ubuntu即登录用户)

在home/ubuntu下新建app目录,后续dockerfile、requirements.txt就都放这里

dockerfile内容如下

FROM python:3.10
WORKDIR /app
ADD requirements.txt /app
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD ["python","start.py"]

dockerfile内容解释:

From python:3.10:python:3.10就是我上面pull的镜像名

WORKDIR /app:设置容器的工作目录,注:这里/app为容器目录

ADD requirements.txt /app:把requirements.txt添加到/app下,后面pip install要用到

RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple:运行pip install安装需要的包,-i后面的地址,是使用清华大学的pip源来安装,这样下载速度会很快

CMD ["python","start.py"]:相当于运行:python start.py,注意CMD和方括号之间要有空格

4、相关文件准备

如上CMD命令可以看到有个start.py,这个就是我要测试运行的py程序,里边是运行一个flask程序,显示hello world。所以我需要把start.py放到Linux下某个路径,docker run的时候,将容器的/app目录映射到Linux下路径即可

5、build构建新的python镜像

docker build -t python3.10:01 .

6、运行测试镜像

docker run -id --name=python3.10-test01 python3.10:01 /bin/sh

7、进入测试容器执行命令

docker exec -it -u 0 python3.10-test01  /bin/sh

接下来就可以直接在容器内执行命令,比如pip list,看看是不是已经pip install成功了,或者手动python xx.py去测试

正式运行docker容器

如上容器测试没问题,那么这个镜像应该就问题不大了

docker run -id -v /home/ubuntu/app/py_test_01:/app -p 1080:5000 --name=python3.10-test02 python3.10:01

这里,-v参数,指定了容器目录/app到Linux目录的映射,这样在上面CMD 命令执行python start.py就可以在/home/ubuntu/app/py_test_01下找到start.py文件了(因此上面也是要把start.py文件放这个目录)

-p参数,指定了Linux宿主机、容器的端口映射,在这里Linux宿主机通过1080即可访问docker容器部署的python web程序

docker logs python3.10-test02

通过docker logs 容器id或name,即可查看日志信息,看看有没报错啥的 

没啥问题的话,就可以成功访问到hello world

一点补充

其实第一个容器没啥用,可以删除掉,主要用来做测试了,实际用的是第二个容器(容器要起作用,就得开放端口)

再一个云服务器资源宝贵,平时看不需要的镜像就可以删除

遇到的问题

1、无法pull镜像

需要将当前用户添加到docker用户组,然后重启docker,重新远程

2、如何方便拷贝文件

我使用了WinSCP,可以图形化界面操作,有点类似ftp的操作,非常方便

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

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

相关文章

hive的使用(本地数据上传到idea)

1.首先第一步是先启动hive,hive的启动指令如下 nohup hiveserver2 & 2.然后我们进入idea中 这里我们使用的是idea里的Apache Hive的插件,进行配置,等我们跟moba连接好后,就可以进行数据的导入了。 hive的sql和mysql里的sql语…

vmvare ubuntu 拖拽复制

目录 先是弹框报错: 但是拖拽到文件夹还是红色的禁止符号,解决方法 在VMware中安装新版Ubuntu后,无法跨虚拟机复制粘贴和拖拽文件的解决方法 先是弹框报错: Ubuntu 22.04 drag and drop is not supported 解决方法:…

常见的sql优化策略

常见的 SQL 优化策略包括: 使用索引: 索引可以加速 SQL 查询的速度,特别是对于经常用于筛选、排序和连接的列。确保在经常查询的列上创建合适的索引,以提高查询性能。 合理设计数据库结构: 设计合理的数据库结构可以提…

ubuntu安装sublime3并设置中文

安装Sublime Text 3 在Ubuntu上安装Sublime Text 3可以通过以下步骤进行: 打开终端。 导入Sublime Text 3的GPG密钥: wget -qO- https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - 添加Sublime Text 3的存储库: …

蓝奏云直链获取在线解析网站源码

源码简介 蓝奏云直链获取在线解析网站源码 蓝奏云链接解析 本地API接口 支持有无密码和短期直链和永久直链,同时还可以显示文件名和大小。 这个解析器无需数据库即可搭建,API接口已经本地化,非常简单易用。 安装环境 php5.6 搭建教程 …

WPF 行为

WPF 行为 一、前言 行为是一类事物的共同特征,可以向用户界面控件添加功能,而无需将其子类化。 功能是在行为类中实现的,并附加到控件上,就像它本身就是控件的一部分。 比如在鼠标进入/离开控件时,表现出不同的现象…

excel wps中编码格式转换

EXCEL报表:另存为CSV格式,转换成UTF-8编码 - 简书 (jianshu.com) 经验证管用

Oracle数据库安全管理与数据加密技术

一、引言 数据安全性的重要性 在现代社会中,信息安全已经成为国家安全和企业安全的重要组成部分。随着人们对数字数据的使用越来越频繁,保护数字信息的安全性和完整性变得越来越重要。对于企业和个人用户来说,数据安全比任何时候都要重要&a…

Flask Python:如何获取不同请求方式的参数

目录 前言 1. 获取GET请求中的查询参数 2. 获取POST请求中的表单数据 3. 获取JSON数据 总结 前言 在使用Flask开发Web应用时,我们经常需要获取不同请求方式的参数。Flask提供了多种方式来获取不同请求方式的参数,包括GET请求中的查询参数、POST请求…

Node.js环境调用百度智能云(百度云)api鉴权认证三步走

方式一 :Postman脚本的方式生成v1版本的认证字符串 Postman脚本下载 下载Postman pre-request Script 设置 Authorization 示例脚本 方式二:在线签名工具生成 (试用于验证编程字符串签名是否有错误) 签名计算工具 https://cloud.baidu.com/signature/index.html …

postgis 建立路径分析,使用arcmap处理路网数据,进行拓扑检查

在postgresql+postgis上面,对路网进行打断化简,提高路径规划成功率。 一、创建空间库以及空间索引 CREATE EXTENSION postgis; CREATE EXTENSION pgrouting; CREATE EXTENSION postgis_topology; CREATE EXTENSION fuzzystrmatch; CREATE EXTENSION postgis_tiger_geocoder;…

掌握机器学习新星:使用Python和Scikit-Learn进行图像识别

正文: 随着智能手机和社交媒体的普及,图像数据的生成速度比以往任何时候都快。为了自动化处理这些数据,我们需要强大的图像识别系统。机器学习提供了一种有效的方法来识别和分类图像中的对象。Scikit-Learn是一个流行的Python库,它…

elementui 左侧或水平导航菜单栏与main区域联动

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 二、elementui 左侧导航菜单栏与main区域联动 三、elementui 中设置图片的高度并支持PC和手机自适应 四、elementui 实现一个固定位置的Pagination(分页)组件 文章目录 系列文章目录…

R语言数据挖掘:随机森林(1)

数据集heart_learning.csv与heart_test.csv是关于心脏病的数据集,heart_learning.csv是训练数据集,heart_test.csv是测试数据集。要求:target和target2为因变量,其他诸变量为自变量。用决策树模型对target和target2做预测&#xf…

zookeeper监听集群节点的实现zkclient组件实现方案(Java版)

ZooKeeper Watcher 机制 client 向zookeeper 注册监听client注册的同时会存储一个WatchManager对象向zookeeper发生改变则notification client 并发送一个WatchManager对象,然后client再更新该对象 package com.jacky.zk.demo;import org.I0Itec.zkclient.IZkChildListener;…

MacOS 14 搭建 PHP7.4 + Xdebug开发环境

摘要 项目使用的技术栈:PHP 7.4.33、ThinkPHP 5.1.27、Redis、MySQL 由于MacOS预装的PHP版本较高,所以需要降级 IDE 使用 PhpStorm 2023.2.3 1. 安装PHP 7.4.33 MacOS 14中的brew版本比较高,没有低版本的PHP brew install shivammathur/p…

如何保证缓存和数据库一致性----缓存双删

如何保证缓存和数据库的一致性 a.缓存双删:修改前删,修改后删,可以用aop去实现(不能保证一致性) b.或者根据业务场景去看,需不需要满足强一致性 c.对强一致性要求特别高需要加业务锁,只要有修改…

基于单片机的汽车尾灯控制系统设计

**单片机设计介绍,基于单片机的汽车尾灯控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的汽车尾灯控制系统设计概要主要涵盖利用单片机技术实现对汽车尾灯的智能控制。下面将从系统构成、工作…

C++函数匹配机制

函数匹配 在大多数情况下,我们容易确定某次调用应该选用哪个重载函数。 然而,当几个重载函数的形参数量相等以及某些形参的类型可以由其他类型转换得来时,这项工作就不那么容易了。 以下面这组函数及其调用为例: void f(); vo…

013——超声波模块驱动开发(基于I.MX6uLL与SR04)

目录 一、 模块介绍 1.1 产品特色 1.2 产品实物图 1.3 接口定义 1.4 测距调节 1.5 模块工作原理 1.6 注意 二、 编码思路 三、 驱动程序 四、 应用程序 五、 Makefile 六、 其它及实验 一、 模块介绍 超声波测距模块是利用超声波来测距。模块先发送超声波&#xf…