【问题标题】:Run a complex series of commands in the same Docker container在同一个 Docker 容器中运行一系列复杂的命令
【发布时间】:2013-06-30 19:02:46
【问题描述】:

我正在尝试使用 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 &lt;image&gt; /bin/bash script.sh 那样将指令包装在脚本中也不起作用,因为我想为循环的每次迭代生成一个 new 容器。

总结一下:

  1. 是否有任何明智的方法来运行一系列复杂的 同一个容器内的上述命令?

  2. 一旦将一些数据保存在容器中,例如 /home/results.txt, 并且容器返回,我如何获取 results.txt?我唯一的办法 能想到的就是commit容器并把文件tar出来 新图片。有没有更有效的方法?

奖励:我应该改用香草 LXC 吗?我没有任何经验,所以我不确定。 谢谢。

【问题讨论】:

    标签: lxc docker


    【解决方案1】:

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

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

    详情:

    这个想法是使用 Fabric 的 local 生成带有 sshd 运行的容器,并使用 Fabric 的 run 在容器上运行命令。

    举一个(Python)的例子,你可能有一个 Container 类:

    1) 一种本地 使用 sshd 启动并运行的新容器的方法,例如

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

    2) 设置 Fabric 连接到正在运行的容器所需的 env 参数 - 查看Fabric's tutorial 了解更多信息

    3) 编写你的方法来运行你想要的一切在容器中利用 Fabric 的运行,例如

    run('uname -on')
    

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

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

    【讨论】:

      【解决方案2】:

      关于问题 2。

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

      【讨论】:

        【解决方案3】:

        您将 2 个问题合二为一。也许您应该将 2. 放在不同的帖子中。我会考虑 1. 这里。

        我不清楚您是想为每次迭代生成一个新容器(正如您首先说的)还是“在同一个容器中运行如上所述的一系列复杂命令? em>”正如你稍后所说的那样。

        如果您想生成多个容器,我希望您的机器上有一个脚本来处理它。 如果您需要将参数传递给您的容器(例如i):目前正在完成传递参数的工作。请参阅 https://github.com/dotcloud/docker/pull/1015(和 https://github.com/dotcloud/docker/pull/1015/files 了解尚未在线的文档更改)。

        【讨论】:

          猜你喜欢
          • 2018-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多