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就行了!
26.如何使用python操作我们自己创建的docker image呢?的更多相关文章
- jira python操作,自动创建问题
jira web api地址 http://jira.**.com/plugins/servlet/restbrowser http://jira.**.com/rest/api/2/issue/cr ...
- python操作excel常用的方法
读操作模块安装 pip install xlrd 写操作模块安装 pip install xlwt xlrd读操作 1.打开excel xl = xlrd.open_workbook('test.xl ...
- 用来创建用户docker registry认证的Secret
集群环境:1.k8s用的是二进制方式安装2.操作系统是linux (centos)3.操作系统版本为 7.4/7.94.k8s的应用管理.node管理.pod管理等用rancher.k8s令牌以及ma ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- python操作数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
- Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python开发【第十九篇】:Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Python操作memcached及redis
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...
随机推荐
- 10进制与16进制之间的转换 delphi
delphi中有直接把10进制转换成16进制的函数: function IntToHex(Value: Integer; Digits: Integer): string; o ...
- pthread线程特定数据
举个栗子 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/t ...
- [ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)
/* 题目中的神仙性质真的是令人愉悦 因为我一眼看成了每个点的度数不超过二十, 心想这他喵的和字符串什么关系 统计树上不同子串个数, 按道理直接dfs n次把所有的串插到后缀自动机里就行了 但是我们发 ...
- django模型之meta使用
模型元数据Meta是“任何不是字段的数据”,比如排序选项(ordering),数据库表名(db_table)或者人类可读的单复数名称(verbose_name 和verbose_name_plural ...
- Python-requests设置请求的超时时间
使用timeout 参数可以设定等待连接的秒数,如果等待超时,Requests会抛出异常 >>> requests.get('http://github.com', timeout= ...
- concurrent.futures模块 -----进程池 ---线程池 ---回调
concurrent.futures模块提供了高度封装的异步调用接口,它内部有关的两个池 ThreadPoolExecutor:线程池,提供异步调用,其基础就是老版的Pool ProcessPoolE ...
- ERROR: iterator not incrementable || iterator not decrementable
这个错误提示:迭代器不可以增加 exmaple: vector<int> tVecInt; vector<int>::reverse_iterator iterInt = tV ...
- [UGUI]图文混排(二):Text源码分析
UGUI源码: https://bitbucket.org/Unity-Technologies/ui/downloads/?tab=tags 首先下载一份UGUI源码,这里我下载的版本是5.3.2f ...
- JDK-1.8-CopyOnWriteSet
CopyOnWriteSet 看了下CopyOnWriteSet源码,底层使用的是CopyOnWriteList,根据底层的实现,每次读取都是N的复杂度.每次写也是N的复杂度.有个代码可以看一下, 来 ...
- python if all
#encoding:utf-8 s=['1','9']sta='56789'# if all(t not in sta for t in s):# print staif all(t not ...