各コマンドの機能に基づいて、いくつかの分離およびリソース制御を使用して、一時コンテナですべてのコマンドを実行する仮想シェルを想像してください。
cat foo.txt | sed ... | xargs some-command
たとえば、各コマンドには、メモリ、ネットワークなし、または読み取り専用でマウントされたファイルシステムにいくつかの制限があります。
プロセスが各プロセスがコンテナで実行されていることを認識しておらず、UNIXパイプを使用してシグナルを送信できるように、これらのシェルを透明な方法で実装できますか?
答え1
質問を理解した場合、パイプのさまざまな境界にあるコンテナがSTDINを正しく受け取り、STDOUTを介してすべてをエクスポートする限り、これがなぜ不可能なのかはわかりません。
あなたは基本的にこれを尋ねています:
$ cat.txt | <container 1 app> | <container 2 app> | ...
これはうまくいきます。
はい
これには、このスクリプトを実行する以外に何もしないDockerコンテナがあります。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28c19c338e6e sleeper "/tmp/run.sh" 6 days ago Up 4 minutes focused_lumiere
そして内部スクリプトは次のようになります。
$ docker exec -it 28c19c338e6e cat /tmp/run.sh
#!/bin/bash
while true; do sleep 30; done
次のコマンドを実行するには、次のようにします。
$ docker exec -it 28c19c338e6e bash -c "echo hi" | \
docker exec -i 28c19c338e6e bash -c "grep hi"
hi
$
別のことをしたい場合grep
:
$ docker exec -it 28c19c338e6e bash -c "echo hi" | \
docker exec -i 28c19c338e6e bash -c "grep bye"
$
これらのdocker
各コマンドはコンテナ内で独自のコマンドを実行しますが、STDIN / STDOUTを介して実行されているBashシェルとパイプに入出力を渡します。