云原生之Docker部署Flask實踐
一、Docker的了解
1、Docker 簡單介紹
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux或Windows操作系統的機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
2、Docker 使用客戶端-服務器架構
Docker客戶端與 Docker守護進程對話,后者負責構建、運行和分發 Docker 容器的繁重工作。Docker 客戶端和守護程序可以在同一系統上運行,或者您可以將 Docker 客戶端連接到遠程 Docker 守護程序。Docker 客戶端和守護程序使用 REST API,通過 UNIX 套接字或網絡接口進行通信。另一個 Docker 客戶端是 Docker Compose,它允許您使用由一組容器組成的應用程序。
二、DockerFile 講解
- FROM 命令
FROM:構建鏡像基于哪個鏡像
- MAINTAINER 命令
MAINTAINER:鏡像維護者姓名或郵箱地址
- RUN 命令
RUN:構建鏡像時運行的指令
- CMD 命令
CMD:運行容器時執行的shell環境
- VOLUME 命令
VOLUME:指定容器掛載點到宿主機自動生成的目錄或其他容器
- USER 命令
USER:為RUN、CMD、 ENTRYPOINT 執行命令指定運行用戶
- WORKDIR 命令
WORKDIR:為 RUN、CMD、ENTRYPOINT、COPY 、 ADD 設置工作目錄
- EXPOSE 命令
EXPOSE:聲明容器的服務端口,僅是聲明
- ENV 命令
ENV:設置容器環境變量
- ADD 命令
ADD:拷貝文件或目錄到容器中,如果是URL或壓縮包便會自動下載或自動解壓
- COPY 命令
COPY:拷貝文件或目錄到容器中,跟ADD類似,但不具備自動下載或解壓的功能
- ENTRYPOINT 命令
ENTRYPOINT:運行容器時執行的shell命令
三、Docker 快速部署python flask框架
1、創建一個最小的Flask
①、 app.py文件。
import flask
# Create the application.
APP = flask.Flask(__name__)
@APP.route('/')
def index():
return "hello 51CTO"
if __name__ == '__main__':
APP.run()
②、 requirements.txt 文件。
導出本項目Python依賴包。
pip freeze > requirements.txt
2、flask代碼和requirements.txt 上傳到服務器
①、準備好要上傳的文件。
②、使用MobaXterm連接到服務器。
③、拖拽文件上傳到服務器。
3、Docker 環境準備
①、Docker拉取 python鏡像。
docker pull python
②、編寫 Dockerfile文件。
FROM python # 基礎鏡像,python
MAINTAINER yukoyu # 鏡像作者信息
WORKDIR /app
# 工作目錄,這個目錄對應于鏡像內的工作目錄,后面的所有涉及到路徑的操作都可以
# 使用WORKDIR的相對路徑來指定
COPY requirements.txt requirements.txt
# 拷貝requirements.txt 到 鏡像中/app/requirements.txt
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安裝pip包
COPY . .
# 將當前文件中的目錄復制到/app目錄下
ENV FLASK_APP app
# 設置環境變量,讓flask run 命令能夠找到啟動文件的位置
CMD ["flask","run","-h","0.0.0.0","-p","5000"]
# 執行啟動命名 flask run -h 0.0.0.0 -p 5000 列表中的每個元素之間代表空格
③、 準備的目錄結構。
4、使用Dockerfile構建鏡像
①、構建。
docker build -t flasktest:1.0 .
②、查看是否成功。
③、運行flasktest鏡像。
docker run --name flasktest01 -p 5000:5000 flasktest:1.0
四、測試效果
運行成功。