はじめに
この実験では、Docker コンテナのライフサイクルを管理するためにdocker startコマンドを使用する方法を探求します。まず、docker startの基本的な目的とdocker runとの違いを理解することから始めます。
ハンズオン演習を通じて、停止したコンテナを同期的に起動する方法、デタッチモードでコンテナを起動する方法、および起動操作のタイムアウトを指定する方法を学びます。この実験を終える頃には、docker startを使用して Docker コンテナを効率的に再開することに習熟しているでしょう。
docker desktop start の目的を理解する
このステップでは、docker startコマンドの目的を理解します。docker startコマンドは、停止している 1 つ以上のコンテナを起動するために使用されます。docker stopでコンテナを停止すると、その状態が保存され、後でdocker startを使用して再開できます。これは、イメージから新しいコンテナを作成して起動するdocker runとは異なります。
まず、停止してから起動できる簡単なコンテナを作成しましょう。ubuntuイメージを使用し、コンテナを短時間実行し続けるコマンドを実行します。
docker run -d --name my-ubuntu ubuntu sleep 60
このコマンドは、Ubuntu コンテナをデタッチモード (-d) で実行し、my-ubuntuという名前を付け、コンテナ内でsleep 60コマンドを実行します。sleep 60コマンドは、コンテナを 60 秒間実行し続けます。
次に、docker psを使用してコンテナの状態を確認します。
docker ps
my-ubuntuコンテナがUpという状態で表示されるはずです。
次に、docker stopコマンドを使用してコンテナを停止します。
docker stop my-ubuntu
このコマンドは、my-ubuntuコンテナに停止シグナルを送信します。
再度docker psを使用してコンテナの状態を確認します。
docker ps
my-ubuntuコンテナはdocker psの出力(実行中のコンテナのみ表示)に表示されなくなります。停止したコンテナを含むすべてのコンテナを表示するには、docker ps -aを使用できます。
docker ps -a
これで、my-ubuntuがExitedという状態で表示されるはずです。これでコンテナが停止したことが確認できました。
最後に、docker startコマンドを使用して停止したコンテナを起動します。
docker start my-ubuntu
このコマンドは、my-ubuntuコンテナを起動します。
最後にもう一度docker psを使用してコンテナの状態を確認します。
docker ps
my-ubuntuコンテナが再びUpという状態で表示されるはずです。これは、docker startが以前停止したコンテナを正常に再開したことを示しています。
まとめると、docker startは停止したコンテナを状態を保持したまま再開するために使用され、docker runは新しいコンテナを作成して起動します。
Docker Desktop を同期起動する
このステップでは、Docker コンテナを同期的に起動する方法を探求します。コンテナを同期的に起動すると、コマンドはコンテナの実行が完了するまで待機してからターミナルに制御を戻します。これは-d(デタッチ)フラグなしでコンテナ内で直接コマンドを実行した場合のデフォルトの動作です。
簡単なubuntuコンテナを使用して、同期的な実行を実演しましょう。メッセージを表示して終了するコマンドを実行します。
まず、ubuntuイメージが利用可能か確認します。ない場合は取得してください:
docker pull ubuntu
次に、"Hello from Ubuntu"と表示して終了するコンテナを同期的に実行します。
docker run --rm ubuntu echo "Hello from Ubuntu"
このコマンドを分解してみましょう:
docker run: 新しいコンテナを作成して実行するコマンド--rm: コンテナ終了時に自動的に削除するフラグ(このような一時的なコンテナに便利)ubuntu: 使用するイメージ名echo "Hello from Ubuntu": コンテナ内で実行されるコマンド
このコマンドを実行すると、ターミナルに直接"Hello from Ubuntu"と表示されます。コンテナ内のechoコマンドが終了し、コンテナが終了するまでコマンドプロンプトは戻りません。これが同期的な実行です。
前のステップで見たデタッチモード(コマンドが即座に戻り、コンテナがバックグラウンドで実行される)と比較してみてください。
同期的な動作をさらに説明するため、少し時間がかかるコマンドを実行してみましょう。
docker run --rm ubuntu sleep 5
このコマンドは Ubuntu コンテナを実行し、sleep 5コマンド(5 秒間実行を一時停止)を実行します。コマンドが完了してプロンプトが戻るまで、5 秒間ターミナルがブロックされることに気付くでしょう。これはdocker runコマンドがコンテナ内のsleep 5コマンドの終了を待っているためです。
この同期モードは、コンテナ内でコマンドを実行し、スクリプトやワークフローで次のアクションに進む前にその出力や完了を待つ必要がある場合に便利です。
Docker Desktop をデタッチモードで起動
このステップでは、Docker コンテナをデタッチモードで起動する方法を学びます。デタッチモードでは、コンテナがバックグラウンドで実行され、Docker コマンドは即座にターミナルに制御を戻します。これは、ターミナルで直接操作する必要のない長時間実行されるサービスやアプリケーションに便利です。
デタッチモードでコンテナを起動するには、docker runまたはdocker startコマンドに-dまたは--detachフラグを指定します。
簡単な Nginx ウェブサーバーコンテナをデタッチモードで起動してみましょう。まず、ローカルにnginxイメージがない場合は取得します。
docker pull nginx
次に、Nginx コンテナをデタッチモードで実行し、コンテナのポート 80 をホストマシンのポート 8080 にマッピングします。
docker run -d --name my-nginx -p 8080:80 nginx
このコマンドを分解してみましょう:
docker run: 新しいコンテナを作成して実行-d: コンテナをデタッチモード(バックグラウンド)で実行--name my-nginx: コンテナにmy-nginxという名前を付ける-p 8080:80: コンテナ内のポート 80 をホストのポート 8080 にマッピング。これにより、ホストマシンのブラウザでhttp://localhost:8080から Nginx ウェブサーバーにアクセス可能nginx: 使用するイメージ名
このコマンドを実行すると、長い文字列(コンテナ ID)が表示され、コマンドプロンプトが即座に戻ります。これはコンテナがバックグラウンドで実行されていることを示します。
コンテナが実行中か確認するには、docker psコマンドを使用します。
docker ps
my-nginxコンテナがUpという状態で表示されるはずです。
curlを使用して、ホストマシンから Nginx ウェブサーバーにアクセスすることもできます。
curl http://localhost:8080
ターミナルに Nginx のデフォルトウェルカムページの HTML コンテンツが表示されれば、コンテナが実行中でマップされたポート経由でアクセス可能であることが確認できます。
デタッチされたコンテナを停止するには、コンテナ名または ID を指定してdocker stopコマンドを使用します。
docker stop my-nginx
コンテナ停止後、docker psで実行中でないことを確認します。
docker ps
my-nginxコンテナは出力に表示されないはずです。
デタッチモードでのコンテナ起動は、ターミナルをブロックせずに継続的に動作させる必要があるサービスやアプリケーションを実行する際に不可欠です。
タイムアウト設定で Docker Desktop を起動
このステップでは、タイムアウトを設定して Docker コンテナを起動する方法を学びます。docker startコマンドには--attachフラグがあり、コンテナの STDOUT/STDERR にアタッチしてシグナルを転送できます。--attachと共に--timeoutフラグを指定すると、クライアントが切断された後にコンテナを停止するまでのタイムアウトを設定できます。これは、コンテナを起動したクライアントが終了した場合にコンテナが無期限に実行され続けないようにするのに特に有用です。
まず、タイムアウト付きで起動できるコンテナを作成しましょう。ubuntuイメージを使用し、コンテナを実行状態に保つコマンドを実行します。
docker create --name my-timeout-ubuntu ubuntu sleep 60
このコマンドはubuntuイメージからmy-timeout-ubuntuという名前のコンテナを作成し、コマンドをsleep 60に設定します。ここではコンテナを作成するだけで起動しないdocker createを使用していることに注意してください。
次に、docker startコマンドに--attachと--timeoutフラグを指定してこのコンテナを起動します。タイムアウトを 5 秒に設定します。
docker start --attach --timeout 5 my-timeout-ubuntu
このコマンドを分解してみましょう:
docker start: 停止中のコンテナを起動--attach: コンテナの STDOUT/STDERR にアタッチし、シグナルを転送--timeout 5: 5 秒のタイムアウトを設定。クライアント(この場合はターミナル)が切断されると、Docker はコンテナが正常に停止するまで 5 秒間待機します。5 秒以内に停止しない場合、Docker は SIGKILL シグナルを送信して強制停止しますmy-timeout-ubuntu: 起動するコンテナの名前
このコマンドを実行すると、コンテナの出力にアタッチされます。コンテナはsleep 60を実行しているだけなので、すぐには出力が表示されません。
次に、クライアント切断をシミュレートします。ターミナルでCtrl+Cを押すことで、コンテナからデタッチできます。
Ctrl+Cを押すと、Docker はタイムアウト処理を開始します。my-timeout-ubuntuコンテナが停止するまで 5 秒間待機します。コンテナはsleep 60を実行しているため、5 秒以内には停止せず、Docker は強制的に停止させます。
コンテナが停止したことを確認するには、docker ps -aを使用します。
docker ps -a
my-timeout-ubuntuがExited状態で表示されるはずです。これでタイムアウト機構が機能し、クライアント切断後にコンテナが停止したことが確認できます。
docker start --attachに--timeoutフラグを使用することは、クライアント接続で起動されたコンテナのライフサイクルを管理し、クライアントが予期せず終了した場合でも適切にクリーンアップされることを保証する良い方法です。
まとめ
この実験では、docker startコマンドの基本的な目的について学びました。このコマンドは停止したコンテナを状態を保持したまま再開するために使用されます。新しいコンテナを作成して起動するdocker runとの違いを明確にしました。実際の手順を通じて、コンテナの作成方法、docker stopを使用した停止方法、docker ps -aによる停止状態の確認、そしてdocker startを使用した再起動方法とdocker psによる実行状態の確認を実践しました。
また、docker desktop startコマンドを使用して Docker Desktop を起動するさまざまな方法も検討しました。同期起動、デタッチモードでの起動、指定したタイムアウト付きでの起動など、これらのオプションは特定のニーズやワークフローに基づいて Docker Desktop の起動動作を柔軟に制御することを可能にします。



