完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)

环境:Ubuntu16.04,docker
【编者物语】:
本人还奔走在学习的道路上,对一下有疑问这欢迎留言探讨。大佬勿喷请绕行

目录结构:

.
├── app_flask.py
├── Dockerfile
├── gunicorn.conf.py
└── requirements.txt

1、创建文件夹docker_flask

mkdir docker_flask

在这里插入图片描述
2、创建app

sudo vim app_flask.py

添加代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(debug=True)

完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第1张图片
3、模拟开发环境的依赖包(这里安装了flask+gevent+gunicorn)导出依赖

pip freeze > requirements.txt

完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第2张图片
在这里插入图片描述

4、编写gunicorn配置文件gunicorn.conf.py文件

sudo vim gunicorn.conf.py

添加一下代码:

workers = 5
worker_class = "gevent"
bind = "0.0.0.0:8080"

完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第3张图片
6、跑一下刚才的程序,看是否正常

python app_flask.py

完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第4张图片完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第5张图片

使用postman测试了一下是正常的

6、这里最重要,编写dockerfile文件

先借一张图介绍一下 dockerfile
完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第6张图片

sudo vim Dockerfile

添加一下代码:

FROM python:3
MAINTAINER WuJian_Home
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "app_flask:app", "-c", "./gunicorn.conf.py"]


以下不用添加
解释一下参数:
FROM   # 指明你创建的镜像,他的基础镜像是谁
MAINTAINER  # 维护者信息
COPY  # 将宿主机的文件cp到创建的镜像当前路径下
RUN  # 你需要在创建镜像之前,需要执行的命令
CMD  # 创建容器后执行的第一个命令

完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第7张图片
7、制作docker image
我这里镜像的名字直接做成flask_demo了

docker build -t flask_demo:1.0 .

完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第8张图片

制作完成了,可以看到还是蛮大的,接下来就是使用它了

docker image ls -a | grep flask_demo
docker images | grep flask_demo

两个命令一样,喜欢用哪一个看你自己啊

在这里插入图片描述

7、使用testflask
创建

docker run -it --name=flask_app -p 5001:8080 flask_demo:1.0

解释一下参数
--name   # 是给你创建的容器起一个名字,在后续进行容器操作的时候可以直接使用名字,不用在使用id
-p   # 将宿主机的端口映射到容器中

完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第9张图片
正常访问:
完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第10张图片
ctrl+c强制结束了:

docker ps -a | grep flask_app
docker container ls -a | grep flask_app

两个命令一样啊,用哪个都可以

完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第11张图片
再次启动:

docker container start flask_app

在这里插入图片描述

再次访问:依然正常
完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第12张图片

进入容器中看看:

docker exec -it flask_app /bin/bash

完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第13张图片
ls下看看我们的文件都在
完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第14张图片
8、制作成为tar,这样就可以发布到任何一台安装过docker的机器,我这里命名为flask_image.tar用于区别

 docker save -o flask_image.tar flask_demo:1.0 

制作完成,没有任何提示
在这里插入图片描述
打开看一下(这个命令是打开当前路径的文件夹)

nautilus ./

可以看到文件是存在的
完整Python使用docker打包部署flask项目(flask+gunicorn+gevent)_第15张图片
9、载入
下边这个文件,你可以添加绝对路径来导入,我是由于就在当前路径下,直接这样写了

docker load --input flask_image.tar

是载入成功的,由于我之前的镜像没有删除,这里没有区别开
在这里插入图片描述

到此,flask项目使用docker就完整完成了

你可能感兴趣的:(Docekr)