はじめに
この実験では、停止したコンテナを再起動するためにdocker container startコマンドを使用する方法を学びます。まず、hello-worldおよびubuntuイメージを使用してコンテナを作成・停止することから始めます。
その後、停止したコンテナを起動するさまざまな方法を探求します。単純に起動する方法、起動して出力にアタッチする方法、インタラクティブに起動する方法などを含みます。これにより、コンテナライフサイクルを管理するためのdocker container startコマンドの柔軟性が実証されます。
コンテナの作成と停止
このステップでは、Docker コンテナを作成・停止する方法を学びます。コンテナはイメージの実行可能なインスタンスです。Docker API や CLI を使用してコンテナの作成、起動、停止、移動、削除が可能です。
まず、Docker Hub からhello-worldイメージをプルしましょう。これはテスト用に便利な非常に小さなイメージです。
docker pull hello-world
イメージがプルされ展開されることを示す出力が表示されます。
Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
次に、hello-worldイメージからコンテナを作成・実行します。このコマンドを実行すると、Docker は新しいコンテナを作成し、イメージで指定されたコマンドを実行します。hello-worldの場合、コマンドは単にメッセージを表示して終了します。
docker run hello-world
以下のような出力が表示されます:
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
この出力はコンテナが正常に実行されメッセージを表示したことを確認します。コンテナ内のコマンドが完了したため、コンテナは停止しています。
停止済みも含むシステム上のコンテナを確認するには、docker ps -aコマンドを使用します。
docker ps -a
コンテナのリストが表示されます。hello-worldコンテナがリストに含まれ、ステータスはExitedになっているはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... hello-world "/hello" About a minute ago Exited (0) 58 seconds ago ...
次に、別のコンテナを作成しますが、今回はubuntuイメージを使用し、コンテナを短時間実行し続けるコマンドを実行します。sleepコマンドを使用してコンテナを 10 秒間生存させます。
まず、ubuntuイメージをプルします:
docker pull ubuntu
イメージがプルされることを示す出力が表示されます。
Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
次に、ubuntuイメージからコンテナを実行し、sleep 10コマンドを実行します。デタッチモード (-d) で実行するため、コンテナはバックグラウンドで動作し、ターミナルをブロックしません。
docker run -d ubuntu sleep 10
このコマンドはコンテナ ID を出力します。
[container_id]
docker psを使用して実行中のコンテナを確認します。
docker ps
ubuntuコンテナがリストされ、ステータスはUpになっているはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About a minute ago Up 5 seconds ...
約 10 秒後、sleep 10コマンドが終了し、コンテナは停止します。再度docker ps -aを使用して、停止したコンテナを含む全てのコンテナを確認します。
docker ps -a
ubuntuコンテナのステータスはExitedになっているはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About a minute ago Exited (0) 5 seconds ago ...
...
最後に、docker stopコマンドを使用して手動でubuntuコンテナを停止します。実行中のコンテナは ID または名前で停止できます。コンテナを実行した際に出力された ID を使用します。[container_id]は実際の ubuntu コンテナの ID に置き換えてください。
docker stop [container_id]
このコマンドは停止されたコンテナ ID を出力します。
[container_id]
再度docker psを使用して、コンテナが実行されていないことを確認します。
docker ps
ubuntuコンテナは実行中のコンテナリストに表示されないはずです。
停止したコンテナの起動
前のステップでは、ubuntuイメージに基づいてコンテナを作成・停止しました。このステップでは、停止したコンテナを起動する方法を学びます。
まず、作成したubuntuコンテナの ID を確認するために、停止中のコンテナを含む全てのコンテナをリスト表示します。
docker ps -a
ubuntuイメージでExitedステータスのコンテナを探し、そのCONTAINER IDをメモしてください。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About 5 minutes ago Exited (0) 4 minutes ago ...
...
次に、docker startコマンドに続けてコンテナ ID を指定することで、この停止したコンテナを起動できます。[container_id]は実際の ubuntu コンテナの ID に置き換えてください。
docker start [container_id]
このコマンドは起動されたコンテナ ID を出力します。
[container_id]
docker psを使用して、コンテナが現在実行中であることを確認します。
docker ps
ubuntuコンテナがリストされ、ステータスがUpになっているはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About 5 minutes ago Up 5 seconds ...
このコンテナの元のコマンドはsleep 10だったため、コンテナは 10 秒間実行された後、再び停止します。数秒後に再度docker ps -aを実行してステータスを確認してください。
docker ps -a
ubuntuコンテナは再びExited状態になっているはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About 5 minutes ago Exited (0) 5 seconds ago ...
...
停止したコンテナを起動することは、新しいコンテナを作成せずに以前のコンテナインスタンスの作業や状態を再開したい場合に便利です。
コンテナの起動と出力へのアタッチ
前のステップでは、コンテナの作成と起動を行いました。docker runやdocker startをデタッチモード (-d) で使用した場合、コンテナはバックグラウンドで実行されます。時には、コンテナの実行中の出力を確認したい場合があります。このステップでは、コンテナを起動し、その標準出力と標準エラーストリームにアタッチする方法を学びます。
まず、5 秒間 1 秒ごとにメッセージを表示する新しいコンテナを作成しましょう。再びubuntuイメージを使用します。
docker run -d ubuntu /bin/bash -c 'for i in {1..5}; do echo "Hello from container $i"; sleep 1; done'
このコマンドはデタッチモード (-d) でコンテナを作成・実行します。コンテナ内で実行されるコマンドは、5 回ループしてメッセージを表示し、各反復で 1 秒間スリープする bash スクリプトです。出力されたコンテナ ID をメモしてください。
[container_id]
次に、この実行中のコンテナにアタッチして出力を確認しましょう。docker attachコマンドの後にコンテナ ID を指定します。[container_id]は実際の ubuntu コンテナの ID に置き換えてください。
docker attach [container_id]
ターミナルにコンテナの出力が表示されるはずです:
Hello from container 1
Hello from container 2
Hello from container 3
Hello from container 4
Hello from container 5
ループが終了すると、コンテナは停止し、ターミナルのプロンプトに戻ります。
既に停止しているコンテナにアタッチしようとすると、docker attachコマンドはすぐに終了します。
コンテナが停止したことを確認するために、全てのコンテナをリスト表示しましょう:
docker ps -a
/bin/bash -c 'for i in {1..5}; do echo "Hello from container $i"; sleep 1; done'というコマンドのコンテナがExited状態で表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "/bin/bash -c 'for i…" About a minute ago Exited (0) 5 seconds ago ...
...
コンテナにアタッチすることは、長時間実行されるプロセスの出力を監視したり、デバッグ目的で役立ちます。
インタラクティブモードでのコンテナ起動
前のステップでは、コマンドを実行して終了するコンテナやバックグラウンドで実行するコンテナを扱いました。多くの場合、仮想マシンやリモートサーバーと同様に、コンテナとインタラクティブに操作したい場合があります。このステップでは、コンテナをインタラクティブに起動し、内部でシェルプロンプトを取得する方法を学びます。
コンテナをインタラクティブに実行するには、docker runコマンドに-iと-tフラグを指定します。
-iフラグは標準入力 (STDIN) を開いたままにします(アタッチされていない場合でも)。これはインタラクティブなプロセスに必要です。-tフラグは疑似 TTY を割り当てます。これはシェルプロンプトに必要です。
ubuntuコンテナを実行し、/bin/bashコマンドを実行してコンテナ内で bash シェルを取得します。
docker run -it ubuntu /bin/bash
このコマンドを実行すると、次のようなシェルプロンプトが表示されます:
root@[container_id]:/#
これは、rootユーザーとして実行中のubuntuコンテナ内に入ったことを示しています。このコンテナ内で標準的な Linux コマンドを実行できます。例えば、オペレーティングシステムのバージョンを確認してみましょう:
cat /etc/os-release
次のような出力が表示され、Ubuntu コンテナ内で実行していることが確認できます:
NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 22.04.3 LTS"
VERSION_ID="22.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=jammy
UBUNTU_CODENAME=jammy
現在のディレクトリのファイルをリスト表示するなど、他のコマンドも試せます:
ls
Ubuntu システムの標準的なルートディレクトリの内容が表示されます。
コンテナから抜けてホストのターミナルに戻るには、コンテナのシェルプロンプトでexitと入力します:
exit
シェルを終了すると、メインプロセス (/bin/bash) が終了するため、コンテナは停止します。
コンテナが停止したことを確認するために、全てのコンテナをリスト表示しましょう:
docker ps -a
/bin/bashコマンドで実行したコンテナがExited状態で表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "/bin/bash" About a minute ago Exited (0) 5 seconds ago ...
...
コンテナをインタラクティブに実行することは、コンテナイメージの調査、コンテナ内アプリケーションのデバッグ、管理タスクの実行に不可欠です。
まとめ
この実験では、docker runとdocker stopコマンドを使用して Docker コンテナを作成・停止する方法を学びました。docker pullでイメージを取得する練習を行い、docker ps -aでコンテナの状態を確認しました。また、すぐに終了するコンテナ (hello-world) と一定期間実行し続けるコンテナ (sleep付きのubuntu) を作成しました。
さらに、docker startコマンドを使用して停止したコンテナを再起動するさまざまな方法を探求しました。単純にコンテナを起動する方法、-aフラグを使用して起動し出力にアタッチする方法、-iフラグを使用してインタラクティブに起動し実行中のコンテナ内でコマンドを実行できるようにする方法を学びました。



