docker 部署 flask(三)高级编写及生成镜像,安装requirements.txt

简介:

上一篇,我写了如何使用别人的docker基础镜像,生成我们的docker镜像。

也就最基本的flask,没有别的库(包)支持。连数据库支持都没有。

也就让大家了解一下怎么生成镜像而已。

本篇介绍如何在docker镜像中安装库(包)支持。

其实我也被卡了2天,没搞定。

https://github.com/tiangolo/uwsgi-nginx-flask-docker/issues/38

在作者的 github问了,还是自己回答。哥真NB,自己提问,自己解答。

一:选择性的忽略

作者网站的使用说明中有这么一段:

Working with submodules

After adding all your modules you could end up with a file structure similar to (taken from the example project):

.
├── app
│   ├── app
│   │   ├── api
│   │   │   ├── api.py
│   │   │   ├── endpoints
│   │   │   │   ├── __init__.py
│   │   │   │   └── user.py
│   │   │   ├── __init__.py
│   │   │   └── utils.py
│   │   ├── core
│   │   │   ├── app_setup.py
│   │   │   ├── database.py
│   │   │   └── __init__.py
│   │   ├── __init__.py
│   │   ├── main.py
│   │   └── models
│   │       ├── __init__.py
│   │       └── user.py
│   └── uwsgi.ini
└── Dockerfile

Make sure you follow the offical docs while importing your modules:

For example, if you are in app/app/main.py and want to import the module in app/app/core/app_setup.py you would wirte it like:

from .core import app_setup

or

from app.core import app_setup

And if you are in app/app/api/endpoints/user.py and you want to import the users object from app/app/core/database.py you would write it like:

from ...core.database import users

or

from app.core.database import users

也就是我们上一篇做的示例二吧。

在我们只有main这一个文件的时候,flask工作良好。

我尝试把以前编写好的flask放进去,就出现无法引用的情况。

按网站使用说明,是要给引用前面加.  或者加app/

这可真不方便。

本地调试良好的flask,上传还要改几行?文件要是多了,还不乱套。

忽略这种方法吧。或许以后写更大规模的flask,会用这种方式。

二:方便使用的方法

QuickStart for bigger projects structured as a Python package

Note: You can download the example-flask-package-python3.6.zip project example and use it as an example or template for your project from the section Examples above.

You should be able to follow the same instructions as in the "QuickStart" section above, with some minor modifications:

    Instead of putting your code in the app/ directory, put it in a directory app/app/.
    Add an empty file __init__.py inside of that app/app/ directory.
    Add a file uwsgi.ini inside your app/ directory (that is copied to /app/uwsgi.ini inside the container).
    In your uwsgi.ini file, add:

[uwsgi]
module = app.main
callable = app

The explanation of the uwsgi.ini is as follows:

    The module in where my Python web app lives is app.main. So, in the package app (/app/app), get the main module (main.py).
    The Flask web application is the app object (app = Flask(__name__)).

Your file structure would look like:

.
├── app
│   ├── app
│   │   ├── __init__.py
│   │   ├── main.py
│   └── uwsgi.ini
└── Dockerfile

...instead of:

.
├── app
│   ├── main.py
└── Dockerfile

...after that, everything should work as expected. All the other instructions would apply normally.

其中第二个:

.
├── app
│   ├── main.py
└── Dockerfile

这个方式是我使用良好的。

三:演示一下

[[email protected] temp]# tree
.
├── app
│   ├── alembic.ini
│   ├── build requirement.py
│   ├── DBconfig.py
│   ├── excel
│   │   └── 2017101618431654.xls
│   ├── ghostdriver.log
│   ├── main.py
│   ├── migrate
│   │   ├── env.py
│   │   ├── pycache
│   │   │   └── env.cpython-36.pyc
│   │   ├── README
│   │   └── script.py.mako
│   ├── Plan.db
│   ├── requirements.txt
│   ├── static
│   │   ├── css
│   │   │   └── bootstrap-reboot.min.css.map
│   │   ├── DatePicker
│   │   │   ├── css
│   │   │   │   └── bootstrap-datepicker.standalone.min.css
│   │   │   ├── js
│   │   │   │   └── bootstrap-datepicker.min.js
│   │   │   └── locales
│   │   │   └── bootstrap-datepicker.zh-TW.min.js
│   │   ├── favicon.ico
│   │   ├── js
│   │   │   └── respond.min.js
│   │   ├── test.png
│   │   └── timg.jpg
│   ├── templates
│   │   └── Untitled-1.htm
│   ├── test.py
│   ├── TODO.txt
│   └── tools
│   ├── cc.json
│   ├── geckodriver.log
│   ├── ghostdriver.log
│   ├── phantomjs.exe
│   ├── pycache
│   │   ├── spider.cpython-36.pyc
│   │   └── xpath.cpython-36.pyc
│   ├── read_plan.py
│   ├── spider.py
│   └── xpath.py
├── docker-compose.override.yml
├── docker-compose.yml
└── Dockerfile

请忽视yml文件。

打包的临时目录只有app目录,其中是完整的flask项目。

还有Dockerfile文件。

FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7

COPY ./app /app
RUN  pip install -r /app/app/requirements.txt

requirements.txt是项目虚拟环境生成的库依赖列表。

可以用pip install 来安装。

dockerfile定了了使用基础镜像tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7

并把app目录加入镜像目录/app

然后就是运行pip install 安装整个环境依赖库。

当我尝试使用QuickStart for bigger projects structured as a Python package当中第一个文件结构打包

.
├── app
│   ├── app
│   │   ├── __init__.py
│   │   ├── main.py
│   └── uwsgi.ini
└── Dockerfile

就不能正常工作了。

虽然可以更改源码来使它工作正常。但是很不方便。

原文地址:https://www.cnblogs.com/jackadam/p/8447094.html

时间: 2024-09-28 01:25:09

docker 部署 flask(三)高级编写及生成镜像,安装requirements.txt的相关文章

【转载】如何自动生成和安装requirements.txt依赖

如何自动生成和安装requirements.txt依赖 在查看别人的Python项目时,经常会看到一个requirements.txt文件,里面记录了当前程序的所有依赖包及其精确版本号.这个文件有点类似与Rails的Gemfile.其作用是用来在另一台PC上重新构建项目所需要的运行环境依赖. requirements.txt可以通过pip命令自动生成和安装 生成requirements.txt文件 pip freeze > requirements.txt 安装requirements.txt依

如何自动生成和安装requirements.txt依赖

在查看别人的Python项目时,经常会看到一个requirements.txt文件,里面记录了当前程序的所有依赖包及其精确版本号.这个文件有点类似与Rails的Gemfile.其作用是用来在另一台PC上重新构建项目所需要的运行环境依赖. requirements.txt可以通过pip命令自动生成和安装 生成requirements.txt文件 pip freeze > requirements.txt 安装requirements.txt依赖 pip install -r requirement

docker 部署 flask(一)配置环境及测试

简介: flask也是要部署的.不能老在我们的pycharm里面跑测试服务器. 各种配置linux,我看就算了吧.我们用docker部署. 也就两三行命令. 一:选择基础镜像 GitHub repo: https://github.com/tiangolo/uwsgi-nginx-flask-docker Docker Hub image: https://hub.docker.com/r/tiangolo/uwsgi-nginx-flask/ 这个应该是比较好的,作者维护的也不错,很多人都在用

开发利器_Pigar.快速为Python项目生成依赖文件requirements.txt?

项目名称: pigar 项目地址: https://github.com/damnever/pigar 使用说明: usage: pigar [-h] [-v] [-u] [-s NAME [NAME ...]] [-c [PATH]] [-l LOG_LEVEL]              [-i DIR [DIR ...]] [-p SAVE_PATH] [-P PROJECT_PATH] Python requirements tool -- pigar, it will do only 

Docker学习5-Dockerfile编写自己的镜像

前言 Dockerfile 可以自定义编写镜像,简单来说就类似写脚本,shell脚本应该接触不少了,就是一个执行后就完成了. 当然做好的镜像也可以传到镜像仓库,就好像github上面一样存储,一个命令就能照搬下来安装. 一.简介 相信不少朋友会问,为何docker run 一下python就停止了呢?(那执行完了不停止干什么?) 还有为什么我的pip安装,每次安装完成了run下一个python容器就没有已安装的库了?显然run是每次都启动一个新的容器.所以不少网友提倡用Dockerfile制作.

原 requirements.txt 介绍 & 快捷生成

requirements.txt介绍   requirements.txt 文件 里面记录了当前程序的所有依赖包及其精确版本号.   这个文件有点类似与Rails的Gemfile.其作用是用来在另一台PC上重新构建项目所需要的运行环境依赖. 生成requirements.txt pip freeze > requirements.txt 1 2 安装requirements.txt依赖 pip install -r requirements.txt 1 2 原文地址:https://www.cn

pipreqs生成requirements.txt

1.简介 一个Python项目中requirements.txt罗列了所有项目需要的packages,别人clone/copy你的项目后,可以通过pip install -r requrements.txt 命令 安装该项目需要的所有包,方便至极.而pipreqs 命令可以根据imports自动生成这样一个requirements.txt文件. 2.使用 安装: pip3 install pipreqs 生成依赖文件requirements.txt: pipreqs ./ 安装依赖文件: pip

Docker学习笔记三:Docker部署Java web系统

Docker部署Java Web系统 1.在root目录下创建一个路径test/app mkdir test && cd test&& mkdir app &&cd app 2.将apache-tomcat-7.0.29.tar.gz及jdk-7u25-linux-x64.tar.gz拷贝 到app目录下 3.解压两个tar.gz文件 tar -zxvf apache-tomcat-7.0.29.tar.gz tar -zxvf jdk-7u25-linux

jenkins介绍部署及三种构建方式配置

[隐藏] 1前言 1.1jenkins介绍 1.2jenkins好处 1.3我的jenkins实践 1.4jenkins使用前提 2jenkins部署 2.1下面内容介绍 2.2环境介绍 2.3jenkins安装 3插件安装 3.1手动下载jenkins插件 4Jenkins密钥配置 5jenkins触发式构建 6jenkins参数化构建 7jenkins定时构建 8Jenkins用户权限设置 8.1新创建一个用户 8.2用户权限设置 1.前言 1.1.jenkins介绍 jenkins是基于j