環境: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就完整完成了