4

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 を取得するにはどうすればよいですか? 私が考えることができる唯一の方法は、コンテナーをコミットし、新しいイメージからファイルを tar することです。それを行うためのより効率的な方法はありますか?

おまけ: 代わりにバニラ LXC を使用する必要がありますか? とはいえ私は経験がないので自信がありません。ありがとう。

4

3 に答える 3

3

私は最終的に自分に合ったソリューションを思いつき、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 が実行中のコンテナーに接続するために必要な環境パラメーターを設定します。詳細については、Fabric のチュートリアルを確認してください。

3) Fabric の実行を利用して、コンテナー内で必要なものすべてを実行するメソッドを記述します。

run('uname -on')

ああ、Ruby の方が好きなら、Capistranoを使って同じことを達成できます。

私を正しい軌道に乗せてくれた@qkrijger(+1'd)に感謝します:)

于 2013-07-06T19:01:55.973 に答える
0

2 つの質問を 1 つで投稿します。2. を別の投稿に入れる必要があるかもしれません。1.ここで考えます。

反復ごとに新しいコンテナーを生成するか (最初に言うように)、 「同じコンテナー内で上記のように複雑な一連のコマンドを実行しますか?」 後で言うように、私には不明です。

複数のコンテナを生成したい場合は、それを処理するスクリプトがマシンにあると思います。コンテナーに引数を渡す必要がある場合 ( などi): 現在、引数を渡す作業が行われています。https://github.com/dotcloud/docker/pull/1015 (およびまだオンラインになっていないドキュメントの変更については、 https: //github.com/dotcloud/docker/pull/1015/files) を参照してください。

于 2013-07-01T12:13:53.470 に答える