python 的env 项目创建docker 镜像 demo

python 的env 项目创建docker 镜像 demo

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 sys
    
    from pip import main
    
    if __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 解释器物使用了绝对路径
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值