Docker コンテナの安全な停止と削除

DockerBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、Docker コンテナを安全に停止し、適切に削除する手順について説明します。Docker ユーザーの経験レベルが初心者であろうとベテランであろうと、コンテナのライフサイクルを管理する方法を理解することは、健全で効率的なコンテナ化環境を維持するために不可欠です。Docker コンテナを終了し、アプリケーションがスムーズに動作するようにするための手順を説明します。

Docker コンテナの理解

Docker は、開発者がアプリケーションを一貫性があり再現可能な方法でパッケージ化およびデプロイできるようにする、人気のコンテナ化プラットフォームです。コンテナは、アプリケーションとその依存関係をカプセル化した軽量で独立した自己完結型のユニットであり、Docker がインストールされているシステムであればどこでもアプリケーションを実行できます。

Docker コンテナとは?

Docker コンテナは、Docker イメージから作成されます。Docker イメージは、本質的にコンテナの内容を定義するテンプレートです。これらのイメージは、ゼロから構築することも、Docker コミュニティや組織が提供する既存のイメージに基づいて構築することもできます。

Docker コンテナを実行すると、イメージに定義されたアプリケーションの新しいインスタンスが作成されます。各コンテナはホストシステムおよび他のコンテナから分離されており、アプリケーションが、基盤となるインフラストラクチャに関係なく、一貫性があり予測可能な方法で実行されることを保証します。

graph TD
    A[Docker イメージ] --> B[Docker コンテナ]
    B --> C[アプリケーション]
    B --> D[依存関係]
    B --> E[ファイルシステム]

Docker コンテナの利点

Docker コンテナは、アプリケーションのデプロイと開発で人気のある選択肢となる、いくつかの利点を提供します。

  1. 移植性: Docker コンテナは、Docker がインストールされているシステムであればどのシステムでも実行でき、さまざまな環境間で一貫した動作を保証します。
  2. スケーラビリティ: Docker コンテナは、簡単にスケールアップまたはスケールダウンでき、需要に基づいてリソースを調整できます。
  3. 効率性: Docker コンテナは軽量であり、従来の仮想マシンよりも少ないリソースを使用するため、実行効率が高いです。
  4. 一貫性: Docker コンテナは、アプリケーションが同じ依存関係と構成でデプロイされることを保証し、デプロイ中に問題が発生するリスクを軽減します。
  5. 分離性: Docker コンテナはホストシステムおよび他のコンテナから分離されており、セキュリティを強化し、アプリケーション間の競合を防ぎます。

Docker コンテナの実践

Docker コンテナを作成および実行するには、docker run コマンドを使用できます。たとえば、Ubuntu 22.04 コンテナを実行するには、次のコマンドを使用できます。

docker run -it ubuntu:22.04 /bin/bash

このコマンドは、Docker Hub レジストリから ubuntu:22.04 イメージをプルし、新しいコンテナを作成し、コンテナ内で対話型のシェルセッションを開始します。

コンテナ内では、アプリケーションをインストールおよび実行し、その依存関係と構成を管理できます。完了したら、exit と入力してコンテナを終了できます。

Docker コンテナの安全な停止

実行中の Docker コンテナを停止する必要がある場合、潜在的な問題を回避するために安全かつ制御された方法で行うことが重要です。Docker は、コンテナを正常に停止するためのいくつかのコマンドとオプションを提供しています。

コンテナの停止

実行中の Docker コンテナを停止するには、docker stop コマンドを使用できます。このコマンドは、コンテナのプライマリプロセスに SIGTERM シグナルを送信し、コンテナが停止する前に必要なクリーンアップやシャットダウンタスクを実行する機会を与えます。

docker stop <container_name_or_id>

デフォルトでは、docker stop コマンドは、コンテナが停止するまで最大 10 秒間待機します。その間にコンテナが停止しない場合、Docker は SIGKILL シグナルを送信してコンテナを強制的に停止します。

正常なシャットダウン

コンテナに正常なシャットダウンを行うための時間を長く与えるには、docker stop コマンドに -t または --time オプションを使用できます。このオプションは、SIGKILL シグナルを送信するまでの待機時間を秒数で指定します。

docker stop -t 60 <container_name_or_id>

この例では、Docker は SIGKILL シグナルを送信する前に、コンテナが停止するまで最大 60 秒間待機します。

複数のコンテナの停止

一度に複数のコンテナを停止する必要がある場合は、docker stop コマンドにコンテナ名または ID のリストをスペースで区切って使用できます。

docker stop <container1_name_or_id> <container2_name_or_id> <container3_name_or_id>

これにより、リストされた順序で指定されたすべてのコンテナが停止します。

コンテナの自動停止

Docker を設定して、ホストシステムのシャットダウンまたは再起動時にコンテナを自動的に停止することもできます。これは、コンテナの起動時に --restart オプションを設定することで行うことができます。

docker run --restart=always <image_name>

--restart=always オプションは、システムのシャットダウンや再起動を含む、いかなる理由でコンテナが停止した場合でも、コンテナを自動的に再起動することを保証します。

これらの Docker コンテナ停止のベストプラクティスに従うことで、アプリケーションを正常にシャットダウンし、データ損失やその他の問題のリスクを最小限に抑えることができます。

Docker コンテナの適切な削除

Docker コンテナを停止した後、システムから削除する必要がある場合があります。Docker コンテナを適切に削除することは、システムリソースを解放し、整理された Docker 環境を維持するために重要です。

単一コンテナの削除

単一 Docker コンテナを削除するには、docker rm コマンドを使用できます。このコマンドは、指定されたコンテナをシステムから削除します。

docker rm <container_name_or_id>

コンテナがまだ実行中の場合は、-f または --force オプションを使用して、コンテナを強制的に削除できます。

docker rm -f <container_name_or_id>

複数コンテナの削除

一度に複数の Docker コンテナを削除するには、docker rm コマンドにコンテナ名または ID のリストをスペースで区切って指定できます。

docker rm <container1_name_or_id> <container2_name_or_id> <container3_name_or_id>

ボリュームを持つコンテナの削除

コンテナに関連付けられたボリュームがある場合、docker rm コマンドはデフォルトではボリュームを削除しません。コンテナとそのボリュームを削除するには、-v または --volumes オプションを使用できます。

docker rm -v <container_name_or_id>

イメージを持つコンテナの削除

コンテナを削除しても、関連付けられたイメージは自動的に削除されません。コンテナとそのイメージを削除するには、コンテナを削除した後、docker rmi コマンドを使用できます。

docker rm <container_name_or_id>
docker rmi <image_name_or_id>

孤立したコンテナとイメージの削除

時間が経つと、実行中のコンテナと関連付けられていない孤立したコンテナやイメージ(つまり、もはや実行中のコンテナと関連付けられていないもの)がシステムに蓄積される可能性があります。これらを削除するには、次のコマンドを使用できます。

## 孤立したコンテナの削除
docker container prune

## 孤立したイメージの削除
docker image prune

これらの Docker コンテナ削除のベストプラクティスに従うことで、整理された Docker 環境を維持し、システムリソースを解放し、Docker の設定が効率的で管理しやすくなるようにすることができます。

まとめ

このチュートリアルを終了するまでに、Docker コンテナを安全に停止および削除する方法をしっかりと理解しているはずです。Docker コンテナを終了するためのベストプラクティスを学び、コンテナ化されたアプリケーションが適切にシャットダウンされ、リソースが回収されることを確認します。この知識があれば、Docker コンテナのライフサイクルを自信を持って管理し、コンテナ化されたインフラストラクチャ全体の安定性と効率性に貢献できるでしょう。