はじめに
この実験では、docker container rmコマンドを使用して Docker コンテナを効果的に管理する方法を学びます。基本的なコンテナの作成と削除を実践し、実行中のコンテナを強制削除する方法、関連する匿名ボリュームと共にコンテナを削除するオプション、そして最後に停止済みの全コンテナを効率的に削除する方法を習得します。
ハンズオン演習を通じて、Docker コンテナのライフサイクル管理に関する実践的な経験を得ることができ、Docker 環境のクリーンアップとリソース管理を効果的に行えるようになります。
コンテナの作成と削除
このステップでは、Docker コンテナの作成と削除方法を学びます。コンテナはイメージの実行可能なインスタンスです。Docker API や CLI を使用して、コンテナの作成、起動、停止、移動、削除が可能です。
まず、コンテナ作成に使用するシンプルなイメージをプルしましょう。ここではhello-worldイメージを使用します。これは「Hello from Docker!」と表示して終了する非常に小さなイメージです。
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
イメージを取得したので、これからコンテナを作成して実行します。docker runコマンドを使用します。
docker run hello-world
このコマンドはhello-worldイメージから新しいコンテナを作成し、イメージ内で指定されたコマンド(「Hello from Docker!」と表示する)を実行した後、コンテナは終了します。ターミナルに「Hello from Docker!」メッセージが表示されます。
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
コンテナの実行が終了すると、停止状態になります。docker ps -aコマンドで停止中のコンテナを含む全てのコンテナを確認できます。
docker ps -a
「Exited」ステータスのhello-worldコンテナが表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> hello-world "/hello" About a minute ago Exited (0) About a minute ago <container_name>
次に、停止したコンテナを削除しましょう。docker rmコマンドに続けてコンテナ ID または名前を指定します。コンテナ ID や名前はdocker ps -aの出力から取得できます。<container_id>を実際のコンテナ ID に置き換えてください。
docker rm <container_id>
コンテナが削除されたことを示すコンテナ ID が表示されます。
<container_id>
コンテナが削除されたことを確認するため、再度docker ps -aを実行します。先ほど削除したhello-worldコンテナは表示されなくなっているはずです。
docker ps -a
出力には削除したhello-worldコンテナが含まれていないことを確認してください。
実行中のコンテナを強制削除
前のステップでは、停止したコンテナを削除しました。しかし、実行中のコンテナはdocker rmで直接削除できません。このステップでは、実行中のコンテナを強制削除する方法を学びます。
まず、実行し続けるコンテナを作成しましょう。ubuntuイメージを使用し、sleep infinityのようなコンテナを維持するコマンドを実行します。ubuntuイメージを持っていない場合は、まずプルしてください。
docker pull ubuntu
次に、ubuntuイメージからデタッチモード (-d) でコンテナを実行し、バックグラウンドで動作させます。
docker run -d ubuntu sleep infinity
コンテナ ID を示す長い文字列が表示されます。
<container_id>
docker psを使用して、コンテナが実行中であることを確認しましょう。
docker ps
「Up」ステータスのubuntuコンテナが表示されるはずです。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id> ubuntu "sleep infinity" About a minute ago Up About a minute ago <container_name>
次に、実行中のこのコンテナをdocker rmコマンドで削除してみます。<container_id>を実際の実行中コンテナの ID に置き換えてください。
docker rm <container_id>
実行中のコンテナは削除できないというエラーメッセージが表示されるでしょう。
Error response from daemon: You cannot remove a running container <container_id>. Stop the container before attempting removal or use -f
エラーメッセージが示すように、コンテナをまず停止するか、-f(強制) フラグを使用する必要があります。コンテナの停止には時間がかかる場合があり、特にコンテナ内のプロセスが停止シグナルにすぐに応答しない場合があります。強制削除は実行中のコンテナを素早く削除する方法ですが、可能であれば通常は適切にコンテナを停止することが推奨されます。
-fフラグを使用して実行中のコンテナを強制削除しましょう。<container_id>を実際の実行中コンテナの ID に置き換えてください。
docker rm -f <container_id>
コンテナが強制削除されたことを示すコンテナ ID が表示されます。
<container_id>
コンテナが削除されたことを確認するため、再度docker psを実行します。ubuntuコンテナは表示されなくなっているはずです。
docker ps
出力には、先ほど削除したubuntuコンテナが含まれていないことを確認してください。
コンテナと匿名ボリュームの削除
このステップでは、コンテナとそれに関連する匿名ボリュームを削除する方法を学びます。コンテナを作成する際、Docker はデータを保存するためのボリュームを作成することがあります。匿名ボリュームとは、作成時に明示的に名前を付けられていないボリュームのことです。通常、イメージの Dockerfile にVOLUME命令がある場合に作成されます。
匿名ボリュームを作成するコンテナを実行してみましょう。再びubuntuイメージを使用し、コロンの前に名前を指定せずに-vフラグでボリュームマウントポイントを指定します。
docker run -d -v /data ubuntu sleep infinity
このコマンドはコンテナと、コンテナ内の/dataにマウントされた匿名ボリュームを作成します。コンテナ ID が表示されます。
<container_id>
次に、作成されたボリュームを確認するため、コンテナを検査します。<container_id>を実際の実行中コンテナの ID に置き換えてください。
docker inspect <container_id>
docker inspectの出力は大きな JSON オブジェクトです。"Mounts"セクションを探してください。/dataにマウントされたボリュームのエントリがあり、"Name"フィールドには長いランダムな文字列が表示され、これが匿名ボリュームであることを示しています。
...
"Mounts": [
{
"Type": "volume",
"Source": "<volume_name>",
"Target": "/data",
"Consistency": "consistent",
"BindOptions": null,
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
...
docker volume lsで全てのボリュームをリスト表示することもできます。匿名ボリュームが表示されるはずです。
docker volume ls
出力にはランダムに生成された名前の匿名ボリュームが含まれます。
DRIVER VOLUME NAME
local <volume_name>
デフォルトでは、コンテナを削除してもその匿名ボリュームは削除されません。まずコンテナを停止しましょう。<container_id>を実際の実行中コンテナの ID に置き換えてください。
docker stop <container_id>
コンテナ ID が表示されます。
<container_id>
次に、ボリュームを削除せずに停止したコンテナを削除します。<container_id>を実際の停止中コンテナの ID に置き換えてください。
docker rm <container_id>
コンテナ ID が表示されます。
<container_id>
再度docker volume lsでボリュームを確認します。匿名ボリュームはまだ存在しているはずです。
docker volume ls
出力には匿名ボリュームがまだ含まれます。
では、別の匿名ボリュームを持つコンテナを作成し、コンテナとそのボリュームを一緒に削除してみましょう。
docker run -d -v /data ubuntu sleep infinity
新しいコンテナ ID を取得します。
<new_container_id>
新しいコンテナを停止します。<new_container_id>を実際の ID に置き換えてください。
docker stop <new_container_id>
コンテナ ID が表示されます。
<new_container_id>
次に、docker rmに-vフラグを付けて、停止したコンテナとその匿名ボリュームを一緒に削除します。<new_container_id>を実際の ID に置き換えてください。
docker rm -v <new_container_id>
コンテナ ID が表示されます。
<new_container_id>
再度docker volume lsでボリュームを確認します。削除したコンテナに関連する匿名ボリュームはなくなっているはずです。最初に作成した匿名ボリュームはまだ残っているでしょう。
docker volume ls
出力には最初に作成した匿名ボリュームのみが表示されるはずです。
停止済みコンテナの一括削除
このステップでは、停止済みのコンテナを一括で削除する方法を学びます。Docker を使用していると、多くの停止済みコンテナが蓄積され、ディスク容量を消費する可能性があります。Docker にはこれらの停止済みコンテナをクリーンアップする便利なコマンドが用意されています。
まず、いくつかの停止済みコンテナを作成しましょう。ubuntuイメージを使用し、すぐに終了するコマンドを実行します。
docker run ubuntu echo "This container will stop immediately"
「This container will stop immediately」という出力が表示され、コンテナはすぐに終了します。
同じコマンドを再度実行して、別の停止済みコンテナを作成します。
docker run ubuntu echo "Another stopped container"
「Another stopped container」という出力が表示され、このコンテナも終了します。
次に、docker ps -aを使用して、停止済みのコンテナを含む全てのコンテナをリスト表示します。
docker ps -a
先ほど作成した 2 つのコンテナが「Exited」ステータスで表示されるはずです。前のステップで削除していない停止済みコンテナも表示される場合があります。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<container_id_1> ubuntu "echo 'This containe…" About a minute ago Exited (0) About a minute ago <container_name_1>
<container_id_2> ubuntu "echo 'Another stopp…" About a minute ago Exited (0) About a minute ago <container_name_2>
...
停止済みのコンテナを全て削除するには、docker container pruneコマンドを使用します。このコマンドは全ての停止済みコンテナを削除します。
docker container prune
Docker はコンテナを削除する前に確認を求めます。yと入力して Enter を押してください。
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
削除されたコンテナ ID のリストが表示されます。
Deleted Containers:
<container_id_1>
<container_id_2>
...
Total reclaimed space: ...
全ての停止済みコンテナが削除されたことを確認するため、再度docker ps -aを実行します。
docker ps -a
出力には実行中のコンテナ(存在する場合)のみが表示され、停止済みコンテナは表示されないはずです。
まとめ
この実験では、docker rmコマンドを使用した Docker コンテナ管理の基本的なプロセスを学びました。まずシンプルなhello-worldコンテナを作成・実行し、作成から終了までのライフサイクルを観察しました。その後、停止したコンテナを ID または名前で削除する練習を行いました。
さらに発展的な削除シナリオについても学びました。-fフラグを使用して実行中のコンテナを強制的に削除する方法と、この操作の影響について理解しました。また、-vフラグを使ってコンテナと関連する匿名ボリュームを一緒に削除し、クリーンな削除を行う方法も習得しました。最後に、Docker 環境を整理するのに便利な、停止済みコンテナを一括削除する効率的なテクニックをマスターしました。



