zoukankan      html  css  js  c++  java
  • 26.如何使用python操作我们自己创建的docker image呢?

    因为逻辑复杂

    我们建个文件来

    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就行了!

  • 相关阅读:
    Java DatagramSocket(UDP)要注意的问题
    Codeforces 475D CGCDSSQ 求序列中连续数字的GCD=K的对数
    apk应用的反编译和源代码的生成
    字符串转换为整数”123“->123
    【LeetCode】Partition List
    Ubuntu下is not in the sudoers file 问题解决
    MySQL查看连接数
    使用HashMap须要注意的事儿:不要暴露Map.entry给外部不可信代码Map.entrySet()
    在 Swift 项目中实现侧滑菜单-利用 SWRevealViewController
    iOS基本UI控件总结
  • 原文地址:https://www.cnblogs.com/PoeticalJustice/p/9513232.html
Copyright © 2011-2022 走看看