python 的env 项目创建docker 镜像 demo

2024-05-08 18:08

本文主要是介绍python 的env 项目创建docker 镜像 demo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

python 的env 项目创建docker 镜像 demo

文章目录

    • 1. 准备虚拟python 虚拟环境和demo 项目
    • 2. 准备docker 镜像环境前提
    • 3. 生成镜像&&测试
    • 关键点:

1. 准备虚拟python 虚拟环境和demo 项目

  1. 安装python env 环境python3 -m venv flask_env3

  2. 启动虚拟环境cd flask_env3 && source bin/active

  3. 编写demo脚本

    #encoding:utf8
    import os
    from flask import Flask, request, jsonify
    import sys
    import requests
    app = Flask(__name__)
    @app.route("/index", methods=["GET"])
    def index():return "hello\r\n"
    if __name__ == "__main__":app.run(debug=True, host="0.0.0.0", port="8101")
    
  4. 依赖两个模块,安转部署

    pip install requests
    pip install flask
    pip freeze > require.txt 
    

2. 准备docker 镜像环境前提

  1. 删除bin 底下的python 软链,复制python解释器到对应位置
    在这里插入图片描述
    删除python3 的原因是因为这个软链在docker容器中没法使用,具体原因未知
    错误提示为:
    如果python 使用软链的话:启动容器的报错为:在这里插入图片描述
  2. 修改pip 的路径为docker 内的路径:
    #!/app/bin/python3  #此为部署docker 容器后python3 的绝对路径,和Dockerfile 文件中的WORKDIR 相关
    # -*- coding: utf-8 -*-
    import re
    import sysfrom pip import mainif __name__ == '__main__':sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])sys.exit(main())
    
    注意 以上如果不修改会出现以下的错误:
    rong
  3. 编写Dockerfile
    FROM centos
    WORKDIR /app
    ADD . /app
    ENV PYTHONPATH /app/bin
    CMD /app/bin/python app.py
    

3. 生成镜像&&测试

  1. 编译命令:
    编译镜像:docker build -t pythonenvdocker:v3 .
    启动容器:run -d -p 8088:8101 pythonenvdocker:v3
    查看状态:docker ps -a (确定是启动状态)
    执行命令:
    [work@*** ~]$ curl http://localhost:8098/index
    hello
    You have mail in /var/spool/mail/work
    进入容器:docker exec -it 23916ad83854 /bin/bash
    

关键点:

  1. virturl env 构建
  2. 删除env 环境中的解释器的软链,复制解释器到对应目录(解释器软链到容器中不可用,原因未知有知道的同学可以解释下)
  3. 修改env 中pip 文件中指向为镜像部署后容器位置,否则pip 可能失败
  4. 在Dockerfile 中指定PYTHONPATH 好像无效(具体原因未知,有知道的同学可以解释下),所以Dockerfile 中的cmd 解释器物使用了绝对路径

这篇关于python 的env 项目创建docker 镜像 demo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971049

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上,或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景: 表单处理:通过 @ModelAttribute 将表单数据绑定到模型对象上预处理逻辑:在请求处理之前

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

Ubuntu20.04离线安装Docker

1.下载3个docker离线安装包,下载网址: https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/ 2.把3个离线安装包拷贝到ubuntu本地执行以下命令 sudo dpkg -i containerd.io_1.4.6-1_amd64.deb sudo dpkg -i docker-ce-c

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa