はじめに
この実験では、実行中のコンテナと対話するためにdocker container attach
コマンドを使用する方法を学びます。デタッチモードでコンテナを起動し、それらにアタッチして出力を確認し、デフォルトのキーシーケンスを使用してデタッチします。
また、TTY(Teletypewriter)が有効なコンテナにアタッチする方法を探求し、Docker コンテナと対話する際の柔軟性を高めるために、デフォルトのデタッチキーシーケンスを上書きする方法を学びます。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、実行中のコンテナと対話するためにdocker container attach
コマンドを使用する方法を学びます。デタッチモードでコンテナを起動し、それらにアタッチして出力を確認し、デフォルトのキーシーケンスを使用してデタッチします。
また、TTY(Teletypewriter)が有効なコンテナにアタッチする方法を探求し、Docker コンテナと対話する際の柔軟性を高めるために、デフォルトのデタッチキーシーケンスを上書きする方法を学びます。
このステップでは、Docker コンテナをデタッチドモードで起動する方法を学びます。コンテナがデタッチドモードで実行されると、バックグラウンドで動作し、Docker CLI はコンテナの標準入力・出力・エラーストリームにアタッチしません。これは長時間実行されるサービスやアプリケーションを実行する際に便利です。
ubuntu
イメージを使用して、メッセージを表示して終了するシンプルなコマンドを実行します。まず、ubuntu
イメージをローカルに用意するためにプルします。
docker pull ubuntu
次に、docker run
コマンドに-d
フラグを指定してデタッチドモードでコンテナを起動します。"Hello from detached container!"というメッセージを表示して終了するシンプルなecho
コマンドを実行します。
docker run -d ubuntu echo "Hello from detached container!"
コマンド実行後、Docker はコンテナ ID を表示します。これはコンテナがデタッチドモードで起動されたことを示しています。docker ps -a
コマンドを使用して、コンテナが実行中か(またはタスクを完了したか)を確認できます。このコマンドは終了したコンテナも含めてすべてのコンテナを表示します。
docker ps -a
起動したコンテナのエントリが表示されるはずです。STATUS
列には、コンテナがまだ実行中か終了したかが表示されます。今回のコマンドは非常に短いため、docker ps -a
を実行する頃にはコンテナはすでに終了している可能性が高いです。
前のステップでは、デタッチドモードでコンテナを起動しました。コンテナはシンプルなコマンドを実行してすぐに終了した可能性がありますが、それでもアタッチして出力を確認できます。docker attach
コマンドを使用すると、実行中または終了したコンテナの標準入力・出力・エラーストリームに接続できます。
まず、前のステップで起動したコンテナの ID を取得します。docker ps -a
コマンドを使用して、echo
コマンドを実行したコンテナを探し、コンテナ ID をコピーしてください。
docker ps -a
次に、docker attach
コマンドの後にコンテナ ID を指定してコンテナにアタッチします。
docker attach <container_id>
<container_id>
を実際のコンテナ ID に置き換えてください。コンテナはシンプルなecho
コマンドを実行して終了しているため、すぐに出力が表示されないか、出力がまだバッファリングされている場合は"Hello from detached container!"というメッセージが表示される可能性があります。attach
コマンドはコンテナのストリームに接続しますが、コンテナはすでにタスクを終了しているため、接続後すぐにコマンドが終了する可能性が高いです。
実行中のコンテナにアタッチするデモンストレーションとして、数秒間実行を維持する新しいデタッチドコンテナを起動しましょう。再びubuntu
イメージを使用し、sleep 10
を実行します。
docker run -d ubuntu sleep 10
docker ps
を使用してこの新しいコンテナの ID を取得します。今回はコンテナがUp
状態になっているはずです。
docker ps
この実行中のコンテナに ID を指定してアタッチします。
docker attach <new_container_id>
<new_container_id>
をsleep 10
を実行しているコンテナの ID に置き換えてください。コンテナの標準ストリームにアタッチされますが、sleep
コマンドは出力を生成しないため何も表示されません。ターミナルは待機状態のように見えます。コンテナは 10 秒間実行された後終了します。コンテナが終了すると、attach
コマンドも終了し、ターミナルプロンプトに戻ります。
前のステップでは、実行中のコンテナにアタッチしました。コンテナにアタッチしている状態では、その標準入力・出力・エラーストリームに接続されています。コンテナを停止せずにデタッチするには、特別なキーシーケンスを使用します。デフォルトではCTRL+p
に続けてCTRL+q
を押します。
デタッチの練習ができるよう、より長い時間実行される新しいデタッチドコンテナを起動しましょう。ubuntu
イメージを使用し、sleep 60
を実行します。
docker run -d ubuntu sleep 60
docker ps
を使用してこの新しいコンテナの ID を取得します。
docker ps
この実行中のコンテナに ID を指定してアタッチします。
docker attach <container_id>
<container_id>
をsleep 60
を実行しているコンテナの ID に置き換えてください。これでコンテナにアタッチされました。コンテナを停止せずにターミナルプロンプトに戻るには、次のキーシーケンスを押します:
CTRL
キーを押したままp
キーを押し、両方のキーを離しますCTRL
キーを押したままq
キーを押し、両方のキーを離しますCTRL+p
に続けてCTRL+q
を押すと、ターミナルプロンプトに戻ります。コンテナはバックグラウンドで実行を継続します。docker ps
を使用してコンテナがまだ実行中か確認できます。
docker ps
sleep 60
を実行中のコンテナがUp
ステータスで表示されるはずです。
このステップでは、別のデタッチドコンテナを起動しますが、今回はコンテナに疑似 TTY(Terminal)を割り当てます。TTY の有効化は、コンテナのシェルと対話したり、ターミナルを必要とするコマンドを実行する場合に必要となることがよくあります。
docker run
コマンドを使用し、デタッチドモードの-d
フラグと疑似 TTY を割り当てる-t
フラグを指定します。sleep 60
のようにコンテナを実行状態に保つシンプルなコマンドを実行します。
docker run -d -t ubuntu sleep 60
-t
フラグは疑似 TTY を割り当てます。これは仮想ターミナルで、物理ターミナルに接続しているかのようにコンテナと対話できます。コンテナがデタッチドモード (-d
) で実行されている場合でも、TTY を有効にすることは、対話型プロセスや後でコンテナにアタッチしてターミナル環境が必要な場合に重要です。
コマンドを実行すると、Docker は再びコンテナ ID を表示し、TTY 付きのデタッチドモードでコンテナが起動したことを示します。docker ps
を使用してコンテナが実行中か確認できます。
docker ps
新しいコンテナがUp
ステータスで表示されるはずです。次のステップでこのコンテナにアタッチする際に必要となるため、コンテナ ID をメモしておいてください。
前のステップでは、TTY を有効化したデタッチドコンテナを起動しました。ここでは、このコンテナにアタッチし、デフォルトのキーシーケンス (CTRL+p
に続けてCTRL+q
) を使用したデタッチを練習します。TTY 有効のコンテナにアタッチすると、初期コマンドが対話を必要としない場合でも、対話型セッションが可能になります。
まず、前のステップで起動したsleep 60
を実行中の TTY 有効コンテナの ID を取得します。
docker ps
sleep 60
を実行中のubuntu
コンテナの ID を確認してください。
次に、docker attach
コマンドとコンテナ ID を使用してこのコンテナにアタッチします。
docker attach <container_id>
<container_id>
を実際のコンテナ ID に置き換えてください。これでコンテナの標準ストリームにアタッチされ、TTY が有効なためターミナルライクなインターフェースが利用可能です。sleep
コマンド自体は対話を必要としませんが、コンテナの仮想ターミナルに接続されています。
コンテナを停止せずにデタッチするには、デフォルトのデタッチキーシーケンスを使用します:
CTRL
キーを押したままp
キーを押し、両キーを離しますCTRL
キーを押したままq
キーを押し、両キーを離しますターミナルプロンプトに戻ります。コンテナはsleep 60
コマンドが完了するまでバックグラウンドで実行を継続します。docker ps
でコンテナが実行中か確認できます。
docker ps
sleep 60
を実行中のコンテナがUp
ステータスで表示されるはずです。
この最終ステップでは、コンテナにアタッチする際にデフォルトのデタッチキーシーケンスを上書きする方法を学びます。これは、デフォルトのシーケンスが他のアプリケーションと競合する場合や、別のキーコンビネーションを好む場合に便利です。
docker attach
コマンドに--detach-keys
フラグを指定して、異なるキーシーケンスを設定します。--detach-keys
フラグのフォーマットはsequence
で、sequence
はカンマ区切りのキーコンビネーション文字列です。例えば、ctrl-a,ctrl-d
と指定すると、デタッチシーケンスはCTRL+a
に続けてCTRL+d
になります。
まず、TTY を有効にした新しいデタッチドコンテナを起動します。このコンテナはしばらく実行されます。
docker run -d -t ubuntu sleep 60
docker ps
を使用してこの新しいコンテナの ID を取得します。
docker ps
次に、このコンテナにアタッチしますが、今回は--detach-keys
フラグを使用して異なるデタッチキーシーケンスを指定します。新しいシーケンスとしてctrl-a,d
を使用します。これは、CTRL+a
に続けてd
を押すことでデタッチすることを意味します。
docker attach --detach-keys="ctrl-a,d" <container_id>
<container_id>
を実際のコンテナ ID に置き換えてください。これでコンテナにアタッチされました。新しいシーケンスでデタッチするには:
CTRL
キーを押したままa
キーを押し、両キーを離しますd
キーを押しますターミナルプロンプトに戻ります。コンテナはバックグラウンドで実行を継続します。docker ps
でコンテナが実行中か確認できます。
docker ps
sleep 60
を実行中のコンテナがUp
ステータスで表示されるはずです。
この実験では、docker run -d
コマンドを使用して Docker コンテナをデタッチドモードで起動する方法を学びました。これにより、ターミナルにアタッチせずにコンテナをバックグラウンドで実行できるようになります。また、docker attach
コマンドを使用して実行中または終了したコンテナの標準ストリームに接続し、その出力を観察する練習を行いました。
さらに、デフォルトのキーシーケンス (CTRL+p CTRL+q
) を使用してアタッチしたコンテナからデタッチする方法と、TTY を有効にして (-t
) コンテナを起動した場合のdocker attach
の動作の変化について検討しました。最後に、コンテナにアタッチする際にデフォルトのデタッチキーシーケンスを上書きする方法を学び、コンテナ操作の柔軟性を高める方法を習得しました。