简介:

上一篇文章,我们简单的测试了一下服务器环境和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. SRLTE,SGLTE,SVLTE,CSFB,VoLTE的区别【转】

    本文转载自:https://blog.csdn.net/dangbochang/article/details/43851979 SRLTE——Single Radio LTE,俗称单待LTE. SG ...

  2. goole机器学习视频链接【学习笔记】

    作者:庄泽彬 说明:在youtu上观看的google的机器学习相关的视频,如何fangqiang请自己解决 机器学习简介:https://www.youtube.com/watch?time_cont ...

  3. linux下的下载之道

    a.场景: 平时会使用百度网盘下载电影,但是用ios版的百度云实在是有点慢,而平时不用windows,因此只能在linux上寻找解决之道. b.背景(我正在使用中): linux:ubuntu 14. ...

  4. POJ1251 Jungle Roads (最小生成树&Kruskal&Prim)题解

    题意: 输入n,然后接下来有n-1行表示边的加边的权值情况.如A 2 B 12 I 25 表示A有两个邻点,B和I,A-B权值是12,A-I权值是25.求连接这棵树的最小权值. 思路: 一开始是在做莫 ...

  5. redhat 7.2更新yum源时踩的坑

    一.update yum .先查看redhat7.2中yum的包版本 [root@localhost jiayimeng]# rpm -qa | grep yum -.el7.noarch -.el7 ...

  6. 【第六章】 springboot + 事务

    在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面. mybatis与spring集成后,其事务该怎么做?其实很简单,直接在上一节代码的基础上在相应的方法(通常是servic ...

  7. C#学习笔记(八):多维数组

    一维数组 冒泡排序 二维数组 Length:取数组元素的总个数 GetLength:取不同维度的个数 using System; using System.Collections.Generic; u ...

  8. HDU 6072 Logical Chain(Kosaraju+bitset)

    http://acm.hdu.edu.cn/showproblem.php?pid=6072 题意: 给你$n*n$的矩阵,每次修改k条边,让你计算其中能相互到达的点对有多少. 思路: 其实就是求强连 ...

  9. UVa 10382 喷水装置(贪心)

    https://vjudge.net/problem/UVA-10382 题意: 有一个长为l,宽为w的草坪,在其中心线不同位置有n个点状的喷水装置,喷水坐标为p,喷水半径为r.求喷到所有草坪的最少喷 ...

  10. Java中关于Arrays.asList()的操作

    我们可以通过Arrays.asList() 产生一个List,但是要记住,我们通过Arrays.asList产生的list是基于一个固定大小的数组的, 仅支持那些不会改变数组大小的操作.所以我们在使用 ...