python中容器的特点(怎样在Python中操作Docker容器?)python初学 / python在容器安全与隔离中的实践...

wufei123 发布于 2024-06-02 阅读(17)

本文由创业公司DeepGram的CTONoah Shutty分享DeepGram开放了自己的API,可以让开发者检索音频和视频文件中的语音信息免费的开发者账号每月有40个小时的上传额度为什么要这样做?Docker容器在分离不同应用方面做的非常出色,但是如果你想让这些应用之间实现交互呢?例如,你正在开发一款Python应用,而这个应用需要与一个用其他语言开发的应用进行交互。

Python官方百科中提供了一些让Python与其他流行的编程语言进行底层交互的技巧但是如果你碰到一个很奇怪的情况,或者某个复杂的遗留软件,交互就变得非常困难,甚至是不可能完成我们的想法:将容器变成模块。

为此,我们创建了sidomo(全称Simple Docker Module,这并不是一个AWS服务)如果你能让那些棘手的应用在Linux环境下运行起来,你就可以通过sidomo,毫不费力地就在Python中调用这个应用。

目前很多人使用容器Docker Daemon API来管理承载着他们应用的容器 (Kubernetes/Mesos就是很好的例子) 而sidomo则为容器开辟了一条全新的用例——将棘手的软件转换为好用的、原生的Python模块,可以与python程序无缝对接。

sidomo的Github仓库地址:https://github.com/deepgram/sidomo怎样使用sidomo确保你的容器正常安装,并且运行了一个容器daemon如果你不确定是否满足条件,可以运行 docker ps命令, 如果你得到的输出信息为 "CONTAINER ID ...",那就没问题 。

假如你还不清楚怎样正确设置docker容器,你可以查看Docker官方文档或者使用谷歌搜索一行代码配置Sidomo你可以用pip直接从git仓库安装sidomo只需要在终端中输入如下命令:pip install -e git+https://github.com/deepgram/sidomo.git#egg=sidomo。

示例:一个简单的Hello World这个操作将从ubuntu基础镜像上开启一个容器,运行echo hello from ,然后运行echo the other side,然后从进程中打印输出信息想要运行这个实例,我们需要使用shell命令将ubuntu镜像pull到你的机器。

shell# Get the latest Ubuntu imagedocker pull ubuntuPythonfrom sidomo import Containerwith Container(ubuntu) as c: for line in c.run(bash -c "echo hello from; echo the other side;"): print(line)

示例: 使用sidomo处理FFMPEG现在我们来用sidomo做些有用的东西FFMPEG是一个比较复杂的软件,能高效的处理媒体文件,但是在不同的平台上保持一致的安装却不容易,而且它没有最新的python包。

使用sidomo,你可以把FFMPEG 安装在docker上,并用Python运行它shelldocker pull cellofellow/ffmpegPythonfrom sidomo import Container

url = http://www2.warwick.ac.uk/fac/soc/sociology/staff/sfuller/media/audio/9_minutes_on_epistemology.mp3

with Container( cellofellow/ffmpeg, stdout=False) as c: for line in c.run(bash -c \"\wget -nv -O tmp.unconverted %s;\

ffmpeg -i tmp.unconverted -f wav -acodec pcm_s16le -ac 1 -ar 16000 tmp.wav;\cat tmp.wav\\"\ % url ):print line

下面的例子将从一个URL抓取音频,将其转码,并打印调试信息以证明它运行成功我们禁用这个进程的标准输出,因为我们只需要看到调试信息如果你需要将此程序转码后的音频数据保存起来,你可以将stdouy=False这一行替换成stderr=False,然后确保将容器进程输出的每一行(裸音频数据)写到文件中。

有趣的可能性如果你不得不为一些复杂的软件编写Python包,可以考虑将这个软件容器化通过sidomo,可以毫不费力地将一个容器化的应用变成Python模块如果你发现自己经常使用subprocess与一些没有Python包的代码进行交互,那么容器化会使交互更加简单。

如果使用了sidomo的Python应用最后出现了复杂的依赖关系,你或许可以把应用包装一个单独的容器中,然后从外部调用这个应用,这样可以减少依赖关系sidomo也支持这个功能,因为Docker是可以实现嵌套容器的。

你可以使用sidomo不断地导入一层又一层容器,从而创建一个自己的软件俄罗斯套娃祝你好运!请记住,你不能无限制地使用容器化来降低复杂度对吗?译文参考了开源中国上的版本,并在其基础进行了精校和改善原文链接:。

http://blog.deepgram.com/import-a-docker-container-in-python/翻译是个脑力活,更是个体力活如果你喜欢编程派的译文,可以考虑扫描下方二维码赞助我。

《Think Python 2e》最新版中文翻译计划

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

河南中青旅行社综合资讯 奇遇综合资讯 盛世蓟州综合资讯 综合资讯 游戏百科综合资讯 新闻1403