用 Python 导入一个 Docker 容器

为什么要这样做?

在将不同应用彼此分离的方面,Docker容器做的相当出色,但是怎样才能使得这些应用能够互相交互呢?比如说,你要用Python开发一款应用,这款应用需要与别的应用进行交互,而该应用又是用另外一种编程语言开发的,怎么办呢。这里有些办法可以使得Python能和其他流行编程语言进行低级别的互相调用 a few techniques。不过,当你遇到一个很棘手的问题 weird case,或者是要处理某个复杂的遗留软件时,这就变得难上加难,甚至成为不可能完成的任务。

解决方案:将容器作为模块 modules

我们来创建一个模块 sidomo – Simple Docker Module*,以便于当你将你棘手的应用带到在任何linux环境中,你都能够不需要额外代价的方式从Python立刻调用它。

目前很多人使用容器Docker Daemon API接口来管理承载着他们应用的容器. (Kubernetes / Mesos 就是这一方案的良好的体现)。 Sidomo为容器开辟了一条全新的道路 — 将棘手的问题软件转换为美好的plain vanilla python模块,使其得以与python无缝对接。

*注:sidomo并不是一个Amazon Web服务 AWS service

怎样使用sidomo

要确保你的容器正常安装,并且运行一个容器daemon。如果你不确定是不是上述的情形,可以运行 docker ps, 得到的输出信息为 “CONTAINER ID …”就对了 。假如你还不清楚怎样正确设置docker容器,你可以check out这个链接 this link 或者点这里搜索 search here 来找到你要的答案。

一行代码配置Sidomo

你可以用pip直接从git分支上安装sidomo。只需要在shell中输入如下命令:

实例:一个简单的Hello World

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

例子: wrangling FFMPEG和sidomo

现在让我们来实际用sidomo做些有用的东西。FFMPEG是一个比较复杂的软件,能高效的处理媒体文件以达到几乎所有目的,但是在不同的平台上保持一致的安装却不是意见容易的事,而且它没有最新的python绑定。使用Sidomo,你可以把FFMPEG 安装在docker上并用Python运行它。

1
docker pull cellofellow/ffmpeg

下面的例子将从一个URL抓取音频,将其转码,并打印调试信息以证明它运行成功。我们将这个进程的标准输出设置为无效,因为我们只需要看到调试信息。

如果你需要将此程序中转码后的音频数据保存起来,你可以将std=False这一行替换成stderr=False,然后将容器进程输出的每一行(裸音频数据)写到文件中。

乐享未来

如果你不得不为一些复杂的软件编写python绑定,可以考虑用容器化软件代替。在sidomo中,将一个容器化的应用变成python模块是不痛苦的,并且是干净的。

如果你发现自己经常使用子流程且绑定的代码不存在,然那么容器化会使这些过程变简单一些。

在开发完成的python应用中往往存在复杂的依赖关系,如果你使用sidomo,你可能需要把应用包装在容器中,这样能让它更少地依赖外部环境。自从docker支持嵌套容器后,sidomo对这些支持都很好。你可以让你的软件通过使用sidomo引入sidomo,再在里面引入sidomo,这就像俄罗斯套娃一样。

祝你好运!请记住,你能不能让容器化无限制地复杂化装入?

Sidomo 在 github

我们为什么要这样做?

我们开放了DeepGram API,这是一个面向音频和视频的搜索引擎,它可以让人的说话声变得可以搜索。DeepGram使用了复杂的信号处理、统计方法、机器学习软件的协调工作,这使得“上传、搜索”的体验变得更加贴合。Sidomo允许我们快速打包运行环境严格的软件,而且他是通过我们的“粘合剂”-Python集成的。

您可以访问www.deepgram.com获取拥有API访问权限的账号。这个账号每个月可以有40小时长度的音视频免费上传额度(这相当长了!)。进来看看吧,让我们知道你需要什么

2 2 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部