docker rmコマンドの使い方(実例付)CE対応


 docker rmコマンドの使い方を解説します。Docker CE ver17.12.1に対応してます。

 このコマンドは、コンテナを削除する際に使用します。

 また、コンテナに設定してあるリンクを削除することも可能です。

※リンクは、docker runコマンドの「--link」オプションにコンテナを指定することで作成します。リンクを作成すると、指定したリンク先のコンテナ情報(IPアドレスなど)が、環境変数を介して取得できるようになります。Docker公式ドキュメントによりますと、リンク機能は将来的に無くなる方向のようです。

 それでは以下で詳細に解説いたします。

 

docker rmコマンドのフォーマットとオプション

フォーマット

docker rm [オプション] [コンテナ] [コンテナ]

 

主なオプション一覧

-f, --force
起動中のコンテナを強制停止して強制的に削除する

-l, --link
コンテナに設定されているリンクを削除する

-v, --volumes
コンテナ停止時に、コンテナにマウントされたデータボリュームも一緒に削除する
※名前付きデータボリュームは削除されません

■ 本記事の目次に戻る ■

docker rmコマンドの主な使い方

 以下の実例は、CentOSの公式イメージにより起動したコンテナ(testvm)を使用します。コンテナは「docker run -d --name testvm centos init」で起動します。

 

停止しているコンテナを削除する

 起動状態のコンテナtestvmを停止した後に削除します。

 現在コンテナtestvmは起動中です。

$ docker ps
CONTAINER ID  IMAGE  COMMAND  CREATED       STATUS        PORTS  NAMES
cd2ce92b5761  centos "init"   3 seconds ago Up 2 seconds         testvm

 まずコンテナtestvmを停止します。

$ docker stop testvm

 停止したことを確認します。

$ docker ps -a
CONTAINER ID  IMAGE   COMMAND CREATED            STATUS                      PORTS NAMES
cd2ce92b5761  centos  "init"  About a minute ago Exited (137) 28 seconds ago       testvm

 停止しているコンテナを、以下のコマンドで削除します。

$ docker rm testvm
testvm

 削除が完了しますと、削除対象のコンテナ名が出力されます。

■ 本記事の目次に戻る ■

 

削除対象コンテナを複数指定して一度に削除する

 3つの停止状態のコンテナtestvm1、testvm2、testvm3があります。

$ docker ps -a
CONTAINER ID  IMAGE   COMMAND CREATED            STATUS                       PORTS  NAMES
9cc4d59f101e  centos  "init"  About a minute ago Exited (137) 22 seconds ago         testvm3
e786b3c5f6d7  centos  "init"  About a minute ago Exited (137) 32 seconds ago         testvm2
5c3b411db5ac  centos  "init"  About a minute ago Exited (137) 42 seconds ago         testvm1

 この3つのコンテナを、以下のコマンドで一度に削除します。

$ docker rm testvm1 testvm3 testvm2

 以下の通り、削除対象のコンテナ名が表示されまして、削除が完了しました。

testvm1
testvm3
testvm2

 削除の順番を確認するために、わざと1,3,2の順番に削除してみました。

■ 本記事の目次に戻る ■

 

起動状態のコンテナを強制削除する

 起動状態のコンテナtestvmを強制削除します。まずは、testvmが起動状態であることを確認します。

$ docker ps
CONTAINER ID  IMAGE   COMMAND CREATED       STATUS        PORTS  NAMES
e09cbfec7c34  centos  "init"  4 seconds ago Up 3 seconds         testvm

起動状態のコンテナをdocker rmコマンドで削除しようとした場合、以下のようなエラーが出ます。

Error response from daemon: You cannot remove a running container 
da058ae0798c092ae377d0cd3275134d00c6228ea747af11c999e472a1c098c6.
 Stop the container before attempting removal or force remove

 「-f」オプション付のdocker rmコマンドを使用することで、コンテナtestvmを強制的に削除することができます。

$ docker rm -f testvm
testvm

 削除が完了しますと、削除対象のコンテナ名が出力されます。

■ 本記事の目次に戻る ■

 

コンテナに指定したリンクを削除する

 Dockerには、コンテナのリンク機能が用意されており、他のコンテナの情報を環境変数として受け取ることが可能です。

 docker rmに「--link」オプションを付けて実行しますと、コンテナの削除ではなく、コンテナに定義したリンクを削除することができます。

 検証を行うために、まずコンテナtestvm2を起動します。

$ docker run -d --name testvm2 centos init

 そのコンテナtestvm2をリンクさせたコンテナtestvmを起動します。

$ docker run -d --name testvm --link testvm2 centos init

 リンクが設定されていることをdocker inspectコマンドにて確認してみます。

$ docker inspect testvm

 出力された文字列内に以下の部分があると思います。

"Links": [
 "/testvm2:/testvm/testvm2"
 ],

 docker runコマンドでリンクを設定すると、内部的には「被リンクコンテナ名:自コンテナ名/エイリアス名」のリンクエントリが生成されます。自コンテナ名は自動で付与されます。エイリアス名は被リンクコンテナを表しています。

 リンクの削除を行う場合は、後半の「自コンテナ名/エイリアス名」の部分を指定します。

 先ほどコンテナtestvmに指定したリンク「--link testvm2」を削除する場合は、以下のコマンドを実行します。

$ docker rm --link testvm/testvm2

 先ほどのdocker inspectコマンドで確認してみます。

$ docker inspect testvm

 先ほど表示されていたLinksの部分が以下の内容に変わってます。

"Links": null,

 リンクの定義を削除しても、コンテナ内で生成されたリンク用の環境変数は自動的に削除されません。対象となる環境変数を削除するためには、コンテナの再起動が必要です。

■ 本記事の目次に戻る ■

 

各種データボリューム毎のコンテナ削除時の処理について

 コンテナ起動時に指定可能なデータボリュームの主なものとしては、以下の3種類存在します。

  1. docker volumeコマンドで作成したデータボリューム
  2. Dockerホスト上の実ディレクトリ
  3. Dockerによる自動生成のデータボリューム

 docker rmの「-v」オプションは、コンテナの削除時に、そのコンテナが使用しているデータボリュームの削除を行ってくれるオプションですが、実際に削除されるのは3の自動生成のデータボリュームのみです。1と2については削除されません。

 また、「-v」オプションを付けずにコンテナを削除した場合は、3のデータボリュームは削除されず、再度同じコンテナを作成して起動したとしても、再利用されません。つまりゴミ領域になってしまいます。

 実際のところ、「削除」の処理を、削除対象を直接指定せず、システム任せで自動削除という運用は、一般的なシステム運用としては受け入れることは難しいと思います。

 私は、データボリュームを使う場合は、以下のように行ってます。

  • 自動生成のデータボリュームは使用しない
  • データボリュームが指定されたコンテナを削除する場合は「-v」は付けない
  • データボリュームが指定されていないコンテナを削除する場合のみ「-v」を付ける(念のためのゴミ掃除的な意味合いでの使用です)

 Dockerの仕様変更などに気付かずに、ある日突然データが消えるようになった、などのトラブルが発生しないように、上記の考え方でdocker rmを使用してます。

 この項目についての実例は、量が多いため別記事にしました。興味のある方は以下の記事をご参照ください。

 docker rmの「-v」オプションと各種データボリュームの関係について

※記事は作成中です。申し訳ございません!(2018.3.29現在)

 

  以上でdocker rmコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(ver1.12対応版)(オリジナルな実例付き)」をご参照ください。

 ご訪問ありがとうございました!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください