2013-06-30 27 views
4

我試圖用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> 

不幸的是,這種做法是有吸引力的,也不maintanable作爲指令的名單不斷增加的複雜性。

如在docker run <image> /bin/bash script.sh中那樣包裝腳本中的指令不起作用,因爲我想爲每個循環的迭代產生一個新的容器。

綜上所述:

  1. 是否有運行作爲同一容器內上述一系列複雜 命令中的任明智的方法?

  2. 一旦某些數據保存在容器中,比如/home/results.txt, 和容器返回,我如何獲得results.txt? I 可以想到的唯一方法是提交容器並將文件從 新映像中取出。有沒有更有效的方法來做到這一點?

獎勵:我應該用香草LXC代替嗎?我沒有任何經驗,但我不確定。 謝謝。

回答

3

我終於想出了一個適用於我的解決方案,並大大改善了我的Docker體驗。

長話短說:我使用了Fabric和一個運行sshd的容器的組合。

詳情:

的想法是產卵用面料的當地正在運行的sshd容器(S),並用布的運行運行在容器上的命令。

授予(Python)的例子,你可能有一個集裝箱類:

1)方法本地都會產生sshd的一個新的容器啓動和運行,例如

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

2)設置由面料所需的ENV參數連接到運行容器 - 檢查Fabric's tutorial更多關於此

3)寫你的方法要在容器中運行您需要一切利用面料的運行,例如

run('uname -on') 

哦,如果你更喜歡紅寶石,你可以使用Capistrano來達到同樣的效果。

感謝@qkrijger(+ 1'd)讓我走上正軌:)

0

你在一個問題中發佈2個問題。也許你應該把2.放在另一個帖子裏。我會在這裏考慮一下。

目前還不清楚您是否想爲每次迭代產生一個新的容器(如您先說),或者如果您想要「」如上所述在同一個容器中運行一系列複雜的命令?「你稍後再說。

如果你想生成多個容器,我希望你的機器上有一個腳本來處理它。 如果您需要將參數傳遞到您的容器(如i):目前正在完成傳遞參數的工作。請參閱https://github.com/dotcloud/docker/pull/1015(和https://github.com/dotcloud/docker/pull/1015/files用於尚未聯機的文檔更改)。

1

關於問題2

我不知道這是不是最好的方式,但你可能在你的圖像上安裝SSH並使用它。有關這方面的更多信息,您可以從文檔中查看this page

相關問題