环境:Ubuntu16.04,docker

目录结构:

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

1、创建文件夹docker_flask

mkdir docker_flask

flask打包成docker flask打包部署_docker


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)

flask打包成docker flask打包部署_ico_02


3、模拟开发环境的依赖包(这里安装了flask+gevent+gunicorn)导出依赖

pip freeze > requirements.txt

flask打包成docker flask打包部署_flask_03


flask打包成docker flask打包部署_flask_04

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

sudo vim gunicorn.conf.py

添加一下代码:

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

flask打包成docker flask打包部署_ico_05


6、跑一下刚才的程序,看是否正常

python app_flask.py

flask打包成docker flask打包部署_docker_06

flask打包成docker flask打包部署_ico_07

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

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

先借一张图介绍一下 dockerfile

flask打包成docker flask打包部署_ico_08

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  # 创建容器后执行的第一个命令

flask打包成docker flask打包部署_flask_09


7、制作docker image

我这里镜像的名字直接做成flask_demo了

docker build -t flask_demo:1.0 .

flask打包成docker flask打包部署_flask打包成docker_10

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

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

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

flask打包成docker flask打包部署_docker_11

7、使用testflask
创建

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

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

flask打包成docker flask打包部署_flask_12


正常访问:

flask打包成docker flask打包部署_flask_13


ctrl+c强制结束了:

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

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

flask打包成docker flask打包部署_docker_14


再次启动:

docker container start flask_app

flask打包成docker flask打包部署_flask_15

再次访问:依然正常

flask打包成docker flask打包部署_ico_16

进入容器中看看:

docker exec -it flask_app /bin/bash

flask打包成docker flask打包部署_ico_17


ls下看看我们的文件都在

flask打包成docker flask打包部署_ico_18


8、制作成为tar,这样就可以发布到任何一台安装过docker的机器,我这里命名为flask_image.tar用于区别

docker save -o flask_image.tar flask_demo:1.0

制作完成,没有任何提示

flask打包成docker flask打包部署_docker_19


打开看一下(这个命令是打开当前路径的文件夹)

nautilus ./

可以看到文件是存在的

flask打包成docker flask打包部署_ico_20


9、载入

下边这个文件,你可以添加绝对路径来导入,我是由于就在当前路径下,直接这样写了

docker load --input flask_image.tar

是载入成功的,由于我之前的镜像没有删除,这里没有区别开

flask打包成docker flask打包部署_flask打包成docker_21

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