当前位置: 首页 > news >正文

docker 部署 flask(二)编写及生成镜像。

简介:

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

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

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

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

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

一:编写flask

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

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

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

 

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

 

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

1. QuickStart  例子一

your Dockerfile like:

FROM tiangolo/uwsgi-nginx-flask:python3.6
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

4 directories, 3 files

查看例二的Dockerfile

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

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 1/2 : FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7
 ---> 669935bdcef7
Step 2/2 : 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 1/2 : FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7
 ---> 669935bdcef7
Step 2/2 : COPY ./app /app
 ---> Using cache
 ---> 3ca5300a9319
Successfully built 3ca5300a9319
[root@NUC temp]# docker run -d --name flask001 -p 80:80 flask001
5a94bb2d644c0a5cc2826dea5106950c5c2c33f282167f5dcfb4d624a8d8d628
[root@NUC temp]# 

 

 

 

 

 

五:运行镜像

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

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

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

hello world

完成。

下一节讲集成包。

转载于:https://www.cnblogs.com/jackadam/p/8444294.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HDU 1846.Brave Game-巴什博奕
  • VC++ GetSafeHwnd()和GetSafeHandle()
  • hibernate框架学习笔记5:缓存
  • Spring 的autowired大坑
  • X86汇编快速入门
  • 块存储,文件存储,对象存储的层次关系
  • HDU.3032.Nim or not Nim?(博弈论 Lasker's Nim)
  • VM CentOS Docker 安装
  • 004
  • spark深入:配置文件与日志
  • 微信支付
  • 计算机程序设计艺术(第三卷)pdf
  • react-native-splash-screen
  • C++蜂鸣器歌曲2
  • python之self本类对象
  • 10个最佳ES6特性 ES7与ES8的特性
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • EventListener原理
  • iOS小技巧之UIImagePickerController实现头像选择
  • java2019面试题北京
  • JavaScript异步流程控制的前世今生
  • java第三方包学习之lombok
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Laravel Mix运行时关于es2015报错解决方案
  • mockjs让前端开发独立于后端
  • node-glob通配符
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React Transition Group -- Transition 组件
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • win10下安装mysql5.7
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端面试之CSS3新特性
  • 算法系列——算法入门之递归分而治之思想的实现
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 数据库巡检项
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​linux启动进程的方式
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​香农与信息论三大定律
  • ​虚拟化系列介绍(十)
  • #php的pecl工具#
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #知识分享#笔记#学习方法
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $ git push -u origin master 推送到远程库出错
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (13):Silverlight 2 数据与通信之WebRequest
  • (Java)【深基9.例1】选举学生会
  • (LeetCode C++)盛最多水的容器
  • (Qt) 默认QtWidget应用包含什么?
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m