环境:Ubuntu16.04,docker
【编者物语】:
本人还奔走在学习的道路上,对一下有疑问这欢迎留言探讨。大佬勿喷请绕行
目录结构:
.
├── app_flask.py
├── Dockerfile
├── gunicorn.conf.py
└── requirements.txt
1、创建文件夹docker_flask
mkdir docker_flask
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)
3、模拟开发环境的依赖包(这里安装了flask+gevent+gunicorn)导出依赖
pip freeze > requirements.txt
4、编写gunicorn配置文件gunicorn.conf.py文件
sudo vim gunicorn.conf.py
添加一下代码:
workers = 5
worker_class = "gevent"
bind = "0.0.0.0:8080"
python app_flask.py
使用postman测试了一下是正常的
6、这里最重要,编写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 # 创建容器后执行的第一个命令
7、制作docker image
我这里镜像的名字直接做成flask_demo了
docker build -t flask_demo:1.0 .
制作完成了,可以看到还是蛮大的,接下来就是使用它了
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 # 将宿主机的端口映射到容器中
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下看看我们的文件都在
8、制作成为tar,这样就可以发布到任何一台安装过docker的机器,我这里命名为flask_image.tar用于区别
docker save -o flask_image.tar flask_demo:1.0
制作完成,没有任何提示
打开看一下(这个命令是打开当前路径的文件夹)
nautilus ./
可以看到文件是存在的
9、载入
下边这个文件,你可以添加绝对路径来导入,我是由于就在当前路径下,直接这样写了
docker load --input flask_image.tar
到此,flask项目使用docker就完整完成了