docker 部署 flask(二)編寫及生成鏡像。


簡介:

上一篇文章,我們簡單的測試了一下服務器環境和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

完成。

下一節講集成包。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM