简介:

上一篇文章,我们简单的测试了一下服务器环境和docker基础镜像。并没有涉及我们自己编写的flask python程序。

现在,我们就要把我们自己的flask程序,放进docker镜像。

但是比较遗憾的是,本篇没有图形界面操作了。

想继续图形操作的,请自行查阅docker hub自动生成镜像。需配合github。

以后会写这个文章。暂时没有,下次写了,再更新链接。

一:编写flask

这个就不说了吧,我这教部署呢,怎么写flask,另找高明。

测试用的flask代码如下所示:

venv文件夹是虚拟环境。上传的时候就不要上传了。

二:查阅官方文档(本章节,几乎就是翻译作者页面的,拣重点说一些。)

这个官方有点大,就是基础镜像维护者写的,关于基础镜像的使用说明。

1. QuickStart  例子一

your Dockerfile like:

FROM tiangolo/uwsgi-nginx-flask:python3.
COPY ./app /app

Create a main.py file (it should be named like that and should be in your app directory) with:

from flask import Flask
app = Flask(__name__) @app.route("/")
def hello():
return "Hello World from Flask" if __name__ == "__main__":
# Only for debugging while developing
app.run(host='0.0.0.0', debug=True, port=80)

You should now have a directory structure like:

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

快速使用,编写了两个文件:Dockerfile,main.py

并展示了相对结构,main.py在app目录下。

2.QuickStart for bigger projects structured as a Python package 例子二

可以下载示例代码https://github.com/tiangolo/uwsgi-nginx-flask-docker/releases/download/v0.3.5/example-flask-package-python3.6.zip

Your file structure would look like:

.
├── 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

可以看出

app/app目录是flask代码,入口文件为main.py

app目录包含app/app目录,还包含一个uwsgi.ini

根目录除了app目录,还有一个Dockerfile

uwsgi.ini文件内容如下:

[uwsgi]
module = app.main
callable = app

Dockerfile文件如下:

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

COPY ./app /app

有兴趣的可以自己跑一下这两个例子,例子一没有源码下载,例子二有源码可以下载。

用法:

把所有源码按照文件结构穿到服务器上。

在有Dockerfile的目录下执行

docker build -t myimage .      (编译镜像,别忘了最后那个点。)

docker run -d --name mycontainer -p 80:80 myimage (运行镜像)

  • Build your Flask image:
docker build -t myimage .
  • Run a container based on your image:
docker run -d --name mycontainer -p 80:80 myimage

三:传输文件

看起来只需要引用一个Docker镜像,然后添加 app目录进去。看着好简单啊。

用示例代码操刀改吧。

把示例代码复制进本地某个目录,我的是D:\temp

删除app/app目录下的所有东西,flask程序。

把我在第一节写的flask示例代码放进去。(不包含venv, .idea,一个是虚拟环境,一个是想法)

最终目录结构如下:

.
├── app
│   ├── app
│   │   ├── main.py
│   │   ├── static
│   │   └── templates
│   └── uwsgi.ini
└── Dockerfile directories, files

查看例二的Dockerfile

FROM tiangolo/uwsgi-nginx-flask:python3.

COPY ./app /app

但是这个镜像不知道是基于什么生成的,测试890M还多。我还是换称alpine做基础的吧。

我们用的Dockerfile:

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

winscp上传到你的服务器把。任意目录都可以。

四:编译镜像

会用winscp,那么会用putty么?

随便你用什么了。反正是进入linux服务器的shell命令模式。

进入你上传的目录。

docker build -t flask001 .
docker run -d --name flask001 -p 80:80 flask001
 
[root@NUC temp]# docker build -t flask001 .
Sending build context to Docker daemon 6.144 kB
Step / : FROM tiangolo/uwsgi-nginx-flask:python3.-alpine3.
---> 669935bdcef7
Step / : COPY ./app /app
---> 3ca5300a9319
Removing intermediate container bba18e9f8c86
Successfully built 3ca5300a9319
[root@NUC temp]# clear
[root@NUC temp]# docker build -t flask001 .
Sending build context to Docker daemon 6.144 kB
Step / : FROM tiangolo/uwsgi-nginx-flask:python3.-alpine3.
---> 669935bdcef7
Step / : COPY ./app /app
---> Using cache
---> 3ca5300a9319
Successfully built 3ca5300a9319
[root@NUC temp]# docker run -d --name flask001 -p : flask001
5a94bb2d644c0a5cc2826dea5106950c5c2c33f282167f5dcfb4d624a8d8d628
[root@NUC temp]#

五:运行镜像

docker run -d --name flask001 -p 80:80 flask001

这行就是运行镜像为容器的命令了。

访问你的服务器IP,试试看吧。

hello world

完成。

下一节讲集成包。

docker 部署 flask(二)编写及生成镜像。的更多相关文章

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

    简介: 上一篇,我写了如何使用别人的docker基础镜像,生成我们的docker镜像. 也就最基本的flask,没有别的库(包)支持.连数据库支持都没有. 也就让大家了解一下怎么生成镜像而已. 本篇介 ...

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

    简介: flask也是要部署的.不能老在我们的pycharm里面跑测试服务器. 各种配置linux,我看就算了吧.我们用docker部署. 也就两三行命令. 一:选择基础镜像 GitHub repo: ...

  3. 从零开始docker部署flask

    1.下载一个Ubuntu镜像 2.启动镜像,使用apt-get安装python.安装pip,建议也装个vim吧 3.通过以上的容器生成一个新的镜像,命令如下docker commit afcaf46e ...

  4. Docker部署Flask应用

    创建应用 首先,编写一个简单的Flask应用:docker_test/flask_app.py Docker 安装 请根据自己的操作系统自行安装. Docker简介 Docker 镜像 Docker镜 ...

  5. docker~通过vs2017的Dockerfile来生成镜像

    回到目录 Dockerfile这个东西我们之前是介绍过,它方便,快捷,易用,而在vs2017中也对docker进行了支持,而生成docker image的方式就是有用Dockerfile为基础的,在添 ...

  6. 【docker】将Java jar文件生成镜像、上传镜像并生成镜像压缩文件

    概述 将Springboot的web服务打包成Jar包后,自动化脚本将jar打包成镜像.上传镜像.并生成镜像的压缩文件: Dockerfile FROM 10.254.9.21/library/ora ...

  7. docker 部署disconf 以及将其做成镜像

    1.需要一台服务器(阿里云,腾讯云.实体服务器都行,本次是以实体服务器为依照做的) 2.安装docker   https://www.cnblogs.com/shijunjie/p/10436293. ...

  8. 基于docker部署flask+gunicorn+nginx

    nginx安装在/etc/下,项目映射在docker中的/var/www/下 1.创建docker容器将端口映射出来,将docker外的项目映射到docker中 #docker run -it -p ...

  9. 用docker部署flask+gunicorn+nginx

    说来惭愧,写了好几个flask django项目都是在原型阶段直接python app.py 运行的,涉及到部署用nginx和gunicorn 都是让别人帮我部署的,据说好像说很麻烦的样子,我就没自己 ...

随机推荐

  1. Python3基础 bool类型变量赋值

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  2. [js] - 关于js的排序sort

    js的排序sort并不能一次排序好 function solution(nums){ return nums.sort(sortNumber); } function sortNumber(a, b) ...

  3. 将一组数组向右移动k位,末尾的要转置移动到数组开始,其中n为数组大小,0<k<n

    下面是使用a数组本身完成: package 数组元素k位右移; /** * 数组向又移动k位. 0<k<n * * @author SeeClanUkyo 将一组数组向右移动k位,末尾的要 ...

  4. ajax用beforeSend自定义请求过程中客户端事件,提高用户体验

    本文为博主原创,未经允许不得转载: 在应用ajax的过程中,当我们再前台提交请求的时候,如果服务端响应事件比较长,就会导致需要等很长时间在前台才能接受到服务端返回的 响应结果,往往会导致用户重复点击按 ...

  5. 为什么mongo中不能用int作为key

    为什么mongo中不能用int作为key??

  6. U3D协程yield的使用和理解

    部分内容参考网址:http://blog.csdn.net/huang9012/article/details/29595747 Win7+U3D 4.6.7 1.在c#中使用①首选需要定义一个返回值 ...

  7. cygwin install git

    Installation with Cygwin If you're comfortable with Cygwin, then use it to install git, ssh, wget an ...

  8. CCF 100012. 技能树

    100012. 技能树 思路:区间dp. 状态:dp[i][j]表示节点为i,高度小于等于j的方案数. 状态转移:dp[i][j]=∑dp[k][j-1]*dp[i-1-k][j-1]. 节点为i,高 ...

  9. rxjs学习

    推荐一个好的网站:http://cn.rx.js.org/manual/overview.html#- https://rxjs-cn.github.io/learn-rxjs-operators/o ...

  10. Unity + NGUI 实现人物头顶UI的信息展示

    1.思路: (1)信息数据:需要展示属性信息 (2)信息的展示:负责显示UI属性信息 (3)UI的跟随:负责实现UI对人物的跟随 (4)UI的管理:负责对UI进行创建于回收,游戏中需要用到UI的地方都 ...