簡介:
上一篇文章,我們簡單的測試了一下服務器環境和docker基礎鏡像。並沒有涉及我們自己編寫的flask python程序。
現在,我們就要把我們自己的flask程序,放進docker鏡像。
但是比較遺憾的是,本篇沒有圖形界面操作了。
想繼續圖形操作的,請自行查閱docker hub自動生成鏡像。需配合github。
以后會寫這個文章。暫時沒有,下次寫了,再更新鏈接。
一:編寫flask
這個就不說了吧,我這教部署呢,怎么寫flask,另找高明。
測試用的flask代碼如下所示:
venv文件夾是虛擬環境。上傳的時候就不要上傳了。
二:查閱官方文檔(本章節,幾乎就是翻譯作者頁面的,揀重點說一些。)
這個官方有點大,就是基礎鏡像維護者寫的,關於基礎鏡像的使用說明。
1. QuickStart 例子一
your Dockerfile
like:
FROM tiangolo/uwsgi-nginx-flask:python3.6 COPY ./app /app
Create a main.py
file (it should be named like that and should be in your app
directory) with:
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World from Flask" if __name__ == "__main__": # Only for debugging while developing app.run(host='0.0.0.0', debug=True, port=80)
You should now have a directory structure like:
.
├── app
│ └── main.py
└── Dockerfile
快速使用,編寫了兩個文件:Dockerfile,main.py
並展示了相對結構,main.py在app目錄下。
2.QuickStart for bigger projects structured as a Python package 例子二
可以下載示例代碼https://github.com/tiangolo/uwsgi-nginx-flask-docker/releases/download/v0.3.5/example-flask-package-python3.6.zip
Your file structure would look like:
.
├── app
│ ├── app
│ │ ├── api
│ │ │ ├── api.py
│ │ │ ├── endpoints
│ │ │ │ ├── __init__.py
│ │ │ │ └── user.py
│ │ │ ├── __init__.py
│ │ │ └── utils.py
│ │ ├── core
│ │ │ ├── app_setup.py
│ │ │ ├── database.py
│ │ │ └── __init__.py
│ │ ├── __init__.py
│ │ ├── main.py
│ │ └── models
│ │ ├── __init__.py
│ │ └── user.py
│ └── uwsgi.ini
└── Dockerfile
可以看出
app/app目錄是flask代碼,入口文件為main.py
app目錄包含app/app目錄,還包含一個uwsgi.ini
根目錄除了app目錄,還有一個Dockerfile
uwsgi.ini文件內容如下:
[uwsgi] module = app.main callable = app
Dockerfile文件如下:
FROM tiangolo/uwsgi-nginx-flask:python3.6
COPY ./app /app
有興趣的可以自己跑一下這兩個例子,例子一沒有源碼下載,例子二有源碼可以下載。
用法:
把所有源碼按照文件結構穿到服務器上。
在有Dockerfile的目錄下執行
docker build -t myimage . (編譯鏡像,別忘了最后那個點。)
docker run -d --name mycontainer -p 80:80 myimage (運行鏡像)
- Build your Flask image:
docker build -t myimage .
- Run a container based on your image:
docker run -d --name mycontainer -p 80:80 myimage
三:傳輸文件
看起來只需要引用一個Docker鏡像,然后添加 app目錄進去。看着好簡單啊。
用示例代碼操刀改吧。
把示例代碼復制進本地某個目錄,我的是D:\temp
刪除app/app目錄下的所有東西,flask程序。
把我在第一節寫的flask示例代碼放進去。(不包含venv, .idea,一個是虛擬環境,一個是想法)
最終目錄結構如下:
. ├── app │ ├── app │ │ ├── main.py │ │ ├── static │ │ └── templates │ └── uwsgi.ini └── Dockerfile 4 directories, 3 files
查看例二的Dockerfile
FROM tiangolo/uwsgi-nginx-flask:python3.6 COPY ./app /app
但是這個鏡像不知道是基於什么生成的,測試890M還多。我還是換稱alpine做基礎的吧。
我們用的Dockerfile:
FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 COPY ./app /app
winscp上傳到你的服務器把。任意目錄都可以。
四:編譯鏡像
會用winscp,那么會用putty么?
隨便你用什么了。反正是進入linux服務器的shell命令模式。
進入你上傳的目錄。
docker build -t flask001 .
docker run -d --name flask001 -p 80:80 flask001
[root@NUC temp]# docker build -t flask001 . Sending build context to Docker daemon 6.144 kB Step 1/2 : FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 ---> 669935bdcef7 Step 2/2 : COPY ./app /app ---> 3ca5300a9319 Removing intermediate container bba18e9f8c86 Successfully built 3ca5300a9319 [root@NUC temp]# clear [root@NUC temp]# docker build -t flask001 . Sending build context to Docker daemon 6.144 kB Step 1/2 : FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 ---> 669935bdcef7 Step 2/2 : COPY ./app /app ---> Using cache ---> 3ca5300a9319 Successfully built 3ca5300a9319 [root@NUC temp]# docker run -d --name flask001 -p 80:80 flask001 5a94bb2d644c0a5cc2826dea5106950c5c2c33f282167f5dcfb4d624a8d8d628 [root@NUC temp]#
五:運行鏡像
docker run -d --name flask001 -p 80:80 flask001
這行就是運行鏡像為容器的命令了。
訪問你的服務器IP,試試看吧。
hello world
完成。
下一節講集成包。