在同一个Docker容器中运行一系列复杂的命令

我试图自动化与Docker的以下循环:产生一个容器,做一些工作( 多个单一的命令 ),从容器中获取一些数据。

有些东西是:

for ( i = 0; i < 10; i++ ) spawn a container wget revision-i do something with it and store results in results.txt 

根据我应该去的文件:

 for ( ... ) docker run <image> <long; list; of; instructions; separated; by; semicolon> 

不幸的是,随着指令列表的复杂性增加,这种方法并不具有吸引力,也不可挽回。

docker run <image> /bin/bash script.sh中包装脚本中的指令是不行的,因为我想为每个循环迭代产生一个新的容器。

总结一下:

  1. 有没有什么明智的方法来在同一个容器中运行上面描述的一系列复杂的命令?

  2. 一旦一些数据被保存在一个容器中,比如说/home/results.txt,并且容器返回,我怎么得到results.txt? 我能想到的唯一方法是提交容器并将文件从新映​​像中解压出来。 有没有更有效的方法来做到这一点?

奖金:我应该使用香草LXC吗? 我没有任何经验,但我不确定。 谢谢。

我最终想出了一个适合我的解决scheme,极大地改善了我的Docker体验。

长话短说 :我使用了Fabric和一个运行sshd的容器的组合。

细节:

这个想法是使用Fabric的本地产生运行sshd的容器,并使用Fabric的运行在容器上运行命令。

为了给出一个(Python)的例子,你可能有一个Container类:

1) 本地产生一个新的容器与sshd启动和运行,例如

 local('docker run -d -p 22 your/image /usr/sbin/sshd -D') 

2)设置Fabric所需的env参数以连接到正在运行的容器 – 请查看Fabric的教程以获取更多信息

3)编写你的方法来运行所有你想要的容器,利用Fabric的运行,例如

 run('uname -on') 

哦,如果你更喜欢Ruby,你可以用Capistrano来达到同样的效果。

感谢@qkrijger(+ 1'd)让我走上正轨:)

在问题2。

我不知道这是否是最好的方法,但是你可以在你的映像上安装SSH并使用它。 有关这方面的更多信息,您可以从文档中查看此页面 。

你在一个问题中发布2个问题。 也许你应该把2.放在不同的职位。 我会在这里考虑一下。

我不清楚你是否想为每一次迭代产生一个新的容器(就像你先说的那样),或者如果你想“ 像上面描述的那样在同一个容器中运行一系列复杂的命令?

如果你想产卵多个容器,我希望你有一个脚本在你的机器上处理。 如果你需要传递一个参数给你的容器(比如i ):目前正在进行传递参数的工作。 请参阅https://github.com/dotcloud/docker/pull/1015 (和https://github.com/dotcloud/docker/pull/1015/files进行文档更改,但尚未联机)&#x3002;