环境:Ubuntu16.04,docker
【编者物语】:
本人还奔走在学习的道路上,对一下有疑问这欢迎留言探讨。大佬勿喷请绕行python
目录结构:web
. ├── app_flask.py ├── Dockerfile ├── gunicorn.conf.py └── requirements.txt
一、建立文件夹docker_flaskdocker
mkdir docker_flask
二、建立appflask
sudo vim app_flask.py
添加代码:vim
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run(debug=True)
三、模拟开发环境的依赖包(这里安装了flask+gevent+gunicorn)导出依赖bash
pip freeze > requirements.txt
四、编写gunicorn配置文件gunicorn.conf.py文件app
sudo vim gunicorn.conf.py
添加一下代码:svg
workers = 5 worker_class = "gevent" bind = "0.0.0.0:8080"
六、跑一下刚才的程序,看是否正常post
python app_flask.py
使用postman测试了一下是正常的学习
六、这里最重要,编写dockerfile文件
先借一张图介绍一下 dockerfile
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 # 建立容器后执行的第一个命令
七、制做docker image
我这里镜像的名字直接作成flask_demo了
docker build -t flask_demo:1.0 .
制做完成了,能够看到仍是蛮大的,接下来就是使用它了
docker image ls -a | grep flask_demo docker images | grep flask_demo 两个命令同样,喜欢用哪个看你本身啊
七、使用testflask
建立
docker run -it --name=flask_app -p 5001:8080 flask_demo:1.0 解释一下参数 --name # 是给你建立的容器起一个名字,在后续进行容器操做的时候能够直接使用名字,不用在使用id -p # 将宿主机的端口映射到容器中
正常访问:
ctrl+c强制结束了:
docker ps -a | grep flask_app docker container ls -a | grep flask_app 两个命令同样啊,用哪一个均可以
再次启动:
docker container start flask_app
再次访问:依然正常
进入容器中看看:
docker exec -it flask_app /bin/bash
ls下看看咱们的文件都在
八、制做成为tar,这样就能够发布到任何一台安装过docker的机器,我这里命名为flask_image.tar用于区别
docker save -o flask_image.tar flask_demo:1.0
制做完成,没有任何提示
打开看一下(这个命令是打开当前路径的文件夹)
nautilus ./
能够看到文件是存在的
九、载入
下边这个文件,你能够添加绝对路径来导入,我是因为就在当前路径下,直接这样写了
docker load --input flask_image.tar
是载入成功的,因为我以前的镜像没有删除,这里没有区别开
到此,flask项目使用docker就完整完成了