
因為邏輯復雜
我們建個文件來


python #是單行注釋
'''是多行注釋
或者”””
我們想使用python來操作docker 那么就要一個api


https://github.com/docker/docker-py官方API 以python來使用docker命令
我其實就想用這個api的 docker run 這個命令 不過是以python的方式





定義一下image


下面就是寫 build——and——run了
他的原理是什么呢?
原理就是使用python操作docker的client
的docker run的API
那么怎么把用戶代碼傳進去呢?
這里有個磁盤映射
就是將我們ubuntu一個文件夾映射到我們docker下面的某個文件
那么在我們docker container里面就看到 這些映射的內容
通過這種映射的方式傳入用戶代碼
當然實現這個的前提是
我們將客戶代碼寫入一個文件(ubuntu)中
然后將這個包含文件的文件夾映射給我們的docker
那么docker在運行的時候通過自帶的load_image方法就會自動得到用戶代碼
所以我們將本地代碼寫入文件去
我們先把返回的結構體寫一下

我們為啥這么寫呢?因為我們在rest.js里面已經定義了返回體了我們看看

這里的build 和run 就是我們 上面返回的東西

python自帶的庫

就是為了唯一指定 用戶代碼 因為我們execution srvice 服務於多個request 這樣好區分
每個用戶對於不同的id和文件夾

定義一下目錄存放位置

本地存放位置用了os這個類庫(pyhton自帶的庫 一般先查就好)


host就是在ubuntu上
guest在docker container 的ubuntu里面的test文件夾下

其實就是將host的文件夾下所有內容映射到guest文件夾下
是一一對應映射的關系
然后創建文件夾

這個方法 os可以模擬很多在linux下面的命令
比如下面的創建文件夾

然后打印log信息
那么下面就要將用戶代碼寫入一個文件

下面就是我們這個系統最核心的部分
這個bulid 就類似 javac xxx

這個execute 就類似java XXX

然后把map拿過來

然后我們在executor——service來調用

為了簡單 我們取名eu


然后
再啟動我們flask之前我們先加載image
因為可能本地沒image 或者我們部署在遠程server上
或者本地你刪掉了
總之 你先load image 確保本地有iamge

我們用 postman來驗證一下


報錯了
這是因為
'/home/han/Projects/BittigerCS503/week4/executor/tmp//df8ea3ef-42fe-409a-86f2-ce180bab8873/example.py'
說沒這個文件夾
因為我們還沒創建



成功
我們再測



沒問題
那么我們將所有的都穿起來
nodeserver 和 exrctionserver 穿起來
我們測試一下


提交

nodeserver

flask





OK
然后我們改改launcher.sh

改成

以后直接運行sudo ./launcher.sh就行了!
