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 是一个高性能的分布式内存对象缓存系统,用 ...
随机推荐
- jquery遍历指定元素下的img图片改变其路径
$(".jieshao img").each(function (i) { $(this).attr("src", "manager/" + ...
- [十二省联考2019]异或粽子 (可持久化01tire 堆)
/* 查询异或最大值的方法是前缀和一下, 在01trie上二分 那么我们可以对于n个位置每个地方先求出最大的数, 然后把n个信息扔到堆里, 当我们拿出某个位置的信息时, 将他去除当前最大后最大的信息插 ...
- 初级安全入门—— WEBshell与文件上传漏洞
概念介绍 WebShell网页木马文件 最常见利用文件上传漏洞的方法就是上传网站木马(WebShell)文件,根据开发语言的不同又分为ASP木马.PHP木马.JSP木马等,该木马利用了脚本语言中的系统 ...
- retry之python重试机制
安装 pip install retry Retry装饰器 retry(exceptions=Exception, tries=-1, delay=0, max_delay=None, backoff ...
- linux下部署jdk+Tomcat
部署jdk (如果是普通用户,先切换到管理员 su root) 1.下载jdk压缩包 2.用xftp将jdk压缩包传输 /opt 目录下 3.解压(在/opt 目录下对压缩包解压) tar -xzvf ...
- 五大排序算法(Python)
冒泡排序 冒泡排序通常是在CS入门课程中教的,因为它清楚地演示了排序是如何工作的,同时又简单易懂.冒泡排序步骤遍历列表并比较相邻的元素对.如果元素顺序错误,则交换它们.重复遍历列表未排序部分的元素,直 ...
- jquery前期总结,及实例
一.元素查找 1.选择器 id=d------------------------------------------>$("#d") class=c1----------- ...
- C#分解质因数
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace app ...
- Java编辑PDF写入文字 插入图片
package com.test; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Font; import com.itex ...
- zookeeper超时:Unable to connect to zookeeper server within timeout: 5000
解决措施: 1:检查 提供方和消费方的address是否正确 <dubbo:application name="dubboxdemo-servive"/> <du ...