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 是一个高性能的分布式内存对象缓存系统,用 ...
随机推荐
- Http跨域
一.传统 ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全. 即使使用jQuery的json ...
- SurFS:共享式和分布式集群各取所长
http://www.ccidnet.com/2016/0811/10168835.shtml 一个集群系统可以做成三层定义,也就是后端存储访问层.沟通协作层.前端数据访问层,如果愣是要给每个层起个洋 ...
- linux:安装mysql管理工具phpmyadmin
1.下载phpmyadmin,下载地址:http://www.phpmyadmin.net/ 2.解压到/var/www/html/phpmyadmin/ 3.修改配置 cd /var/www/htm ...
- es6基础(2)--解构赋值
//解构赋值 { let a,b,rest; [a,b]=[1,2]; console.log(a,b); } //数组解构赋值 { let a,b,rest; [a,b,...rest]=[1,2, ...
- 安全测试1_Web知识简介
接下去所有的安全测试都是本人学习安全测试的过程,随笔中会截取云课堂视频中的图片(比较生动和形象,便于理解),主要目的是方便自己以后复习和巩固! 1.Web发展阶段概述: 2.web安全我能提发展形势: ...
- HDU1847 Good Luck in CET-4 Everybody 博弈 SG函数
题意:给定n张牌,两个人轮流摸牌,每次摸牌张数为2的幂次,问先手胜还是后手胜 n≤1000 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1847 # ...
- 《机器学习实战》Logistic回归
注释:Ng的视频有完整的推到步骤,不过理论和实践还是有很大差别的,代码实现还得完成 1.Logistic回归理论 http://www.cnblogs.com/wjy-lulu/p/7759515.h ...
- [Unity插件]Lua行为树(三):组合节点Sequence
Sequence的继承关系如下: Sequence->Composite->ParentTask->Task 上一篇已经实现了简单版本的ParentTask和Task(基于Behav ...
- spring初始化相关
获取applicationContext implements ApplicationContextAware @Override public void setApplicationContext( ...
- java http get、post请求
package com.zpark.test; import org.junit.Test; import java.io.BufferedReader; import java.io.IOExcep ...