docker run:--rmを使用する理由(docker newbie)


101

私は初めてドッカーを試してみましたが、まだ「メンタルモデル」がありません。完全初心者。

私が見ているすべての例には--rm、実行するフラグが含まれています

docker run -it --rm ...
docker container run -it --rm ...

質問:

これらのコマンドに--rmフラグが含まれているのはなぜですか?良いものを入れたコンテナをセットアップしたりダウンロードしたりするというトラブルを経験したとしたら、なぜそれを削除するのでしょうか?また使いたいです。

だから、私はドッカーの間違った考えを持っていることを知っています。


4
--rm停止したコンテナ(コンテナdocker runが作成したもの)を削除します。元のイメージ(ダウンロードしたもの)ではありません。
Ry-

docker run --help役立つはずです。コンテナーを削除したくない場合は、それを渡すことができます
indapublic

1
それはそうでなければならず--rm、それはコンテナが終了したときに自動的にコンテナをクリーンアップしてファイルシステムを削除することであり、それはコンテナからものを削除することを意味しません。
マハタム

2
コンテナーをダウンロードするのではなく、イメージをダウンロードします。イメージとコンテナの違いについては、こちらをご覧ください:docs.docker.com/engine/docker-overview/#docker-objects
axiac

回答:


92

コンテナーは、コンテナーを実行するために使用するイメージのインスタンスにすぎません。コンテナー化されたアプリを作成するときの心の状態は、たとえば、新鮮でクリーンなubuntuコンテナーを取得し、そこに含めるアプリと構成をダウンロードして実行することではありません。

コンテナはアプリケーションのインスタンスとして扱う必要がありますが、アプリケーションは画像に埋め込まれています。適切な使用法は、すべてのファイル、構成、環境変数などをイメージに埋め込むカスタムイメージの作成です。Dockerfileの詳細とその方法については、こちらをご覧ください

これを行うと、すべてを含むイメージができます。アプリケーションを使用するには、適切なポート設定またはその他の動的変数を使用してイメージを実行します。 docker run <your-image>

--rmフラグ付きのコンテナを実行することは、何かを達成するために非常に短い間使用するコンテナに適しています。たとえば、コンテナ内でアプリケーションをコンパイルしたり、動作するものをテストしたりすると、そのコンテナが短命であることがわかります。 Dockerデーモンに、実行が完了したら、それに関連するすべてのものを消去し、ディスク領域を節約するように伝えます。


環境変数をdocker runに渡すことは、より良い代替手段です。このようにして、異なる構成(たとえば、実動と実動前)から始めることができますか?
SCO

製品環境とテスト環境は、おそらく環境変数を使用して分離し、アプリを同じイメージから実行するが、環境ごとに異なる設定を使用する良い例です
buddy123

--rmユーザーがターミナルウィンドウを閉じたときに使用を開始したコンテナーを自動的に削除する方法はありますか?つまり、意図的にexitコンテナーシェルで実行するのではなく、ターミナルGUIウィンドウを閉じるだけです。この場合、コンテナは削除されないことに気づきました。
venkrao

20

このフラグ--rmは、タスクの完了後にコンテナーを削除する必要がある場合に使用されます。

これは小規模なテストやPOCの目的に適しており、ハウスキーピングの頭痛を軽減します。


16

https://docs.docker.com/engine/reference/run/#clean-up---rmから

デフォルトでは、コンテナのファイルシステムは、コンテナが終了した後も存続します。これにより、デバッグが非常に簡単になり(最終状態を検査できるため)、デフォルトですべてのデータが保持されます。しかし、短期間のフォアグラウンドプロセスを実行している場合、これらのコンテナファイルシステムは実際に蓄積する可能性があります。代わりに、Dockerでコンテナーが自動的にクリーンアップされ、コンテナーが終了したときにファイルシステムを削除する場合は、-rmフラグを追加できます

簡単に言うと、停止した未使用のコンテナからホストをクリーンに保つことは有用です。


1

--rm実行中のコンテナーに接続して、データベースのバックアップやファイルのコピーなどのアクションを実行するときに使用します。次に例を示します。

docker run -v $(pwd):/mnt --link app_postgres_1:pg --rm postgres:9.5 pg_dump -U postgres -h pg -f /mnt/docker_pg.dump1 app_db

上記は 'app_postgres_1'という名前の実行中のコンテナーを接続し、バックアップを作成します。バックアップコマンドが完了すると、コンテナは完全に削除されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.