Dockerコンテナーの実行と開始の違い


307

実際に私が行うコンテナを開始するには:

docker run a8asd8f9asdf0

その場合、何をしますか:

docker start

行う?

マニュアルではそれは言う

停止している1つ以上のコンテナーを開始する


101
run = create + start
Fumisky Wells 2017

4
OPにも「実行」も含まれていたといいのですが
モニカヘドネック

役立つかもしれません:chat.stackoverflow.com/transcript/76919
Shubham

@MonicaHeddneckドッカーはありexecuteますか?
Koray Tugay

以前にこのコンテナーを停止していた場合は、コンテナーの開始を使用します。このイメージのコンテナを削除した場合は、run to imageを使用します。これが基本的な使い方だと思います。
CodeSlave

回答:


350

これは非常に重要な質問であり、答えは非常に単純ですが、基本的なものです。

  1. 実行:イメージの新しいコンテナーを作成し、コンテナーを実行します。同じイメージのN個のクローンを作成できます。コマンドは次のとおりです。 docker run IMAGE_ID とはありません docker run CONTAINER_ID

ここに画像の説明を入力してください

  1. 開始:以前に停止したコンテナを起動します。たとえば、コマンドdocker stop CONTAINER_IDでデータベースを停止した場合、コマンドで同じコンテナを再起動するdocker start CONTAINER_IDと、データと設定は同じになります。

ここに画像の説明を入力してください


1
データを保持するには、停止したコンテナーにボリュームを作成する必要がありますか?
Logan Phillips

@LoganPhillipsコンテナーのデフォルトのユニオンファイルシステムレイヤーに書き込まれたファイルとボリュームに書き込まれたファイルのライフサイクルの違いは次のとおりです:コンテナーを削除すると、コンテナーのユニオンファイルシステムレイヤーのデータは常に失われます(docker rm container_id)。一方、-vコマンドラインでオプションを明示的に指定しない限り、ボリュームデータはコンテナーの削除後も存続します。ホストシステム上のボリュームの場所を直接検査できます。この記事を参照してください
Stphane

プロセスについて&runコマンドラインの最後に必要ですか?数々の(24時間)サービスとして必要
Peter Krauss

では、「docker create」の目的は何でしょうか。それはどのように/いつ使用されますか?
ジョセフガニオン

100
  • run画像を実行します
  • startコンテナを起動します。

docker runドキュメントは言及を行います。

このdocker runコマンド、まず指定されたイメージ上に書き込み可能なコンテナーレイヤーを作成し、次に指定されたコマンドを使用してそれを開始します。

つまり、docker runはAPI /containers/createthen と同等/containers/(id)/startです。

あなたは、あなたがそれに(ドッカ1.3以降)のexecドッキングウィンドウ、既存のコンテナを実行しないでください終了したコンテナ
再起動できます。


@Tarikは、インタラクティブなプロセスのために追加-iする必要はありませんdocker runか?つまり、docker runにはコンテナーを実行するためのイメージが必要です。
VonC 2016年

10
誰かがもっと手の込んだ返答を書く余地があるようです。答えはあまり説明に見えません。
qartal 2017年

4
私のために次の質問はいただきまし-差-間-コンテナと-イメージだった stackoverflow.com/questions/21498832/...
アレックスPunnen

18

例による説明:

コンピューターにゲーム(iso)イメージがあるとします。

あなたが run(仮想ドライブとしてあなたのイメージをマウントする)、仮想ドライブを仮想ドライブとゲームのインストールファイル内のすべてのゲームコンテンツが自動的に起動されると作成されます。[Dockerイメージの実行-コンテナーを作成してから開始します。]

ただし、stop(docker stopと同様に)仮想ドライブは存在しますが、すべてのプロセスを停止します。【コンテナは削除されるまで存在するため】

あなたが行うときとstart(ドッカ開始に類似する)、仮想ドライブからゲームファイルは、その実行を開始します。【既存コンテナの起動】

この例では-ゲームイメージはDockerイメージであり、仮想ドライブはコンテナーです。


8

daniele3004の答えはすでにかなり良いです。

ただ、間に合わせのアップミックス私のような人のための式runstart時間から時間まで:

docker run [...]= docker pull [...]+docker start [...]


2
これは真実ではありません。公式ドキュメントによれば、"...docker run is equivalent to the API /containers/create then /containers/(id)/start.(ソース:docs.docker.com/engine/reference/commandline/run
sshh

2

runコマンドはイメージからコンテナーを作成し、このコンテナーでルートプロセスを開始します。それを実行するrun --rmフラグはあなたに後で無用死んだコンテナを除去する手間を省くだろうし、あなたがの存在を無視することができるようになるdocker startdocker remove完全に。

ここに画像の説明を入力してください

run コマンドはいくつかの異なることをします:

docker run --name dname image_name bash -c "whoami"
  1. イメージからコンテナを作成します。この時点で、コンテナーにはIDがあり、指定されている場合は名前が付いている可能性があります。docker ps
  2. コンテナーのルートプロセスを開始/実行します。上記のコードで実行されますbash -c "whoami"ます。1が実行された場合docker run --name dname image_nameに実行するコマンドを指定せずに、コンテナは直ちに停止状態になります。
  3. ルートプロセスが完了すると、コンテナーは停止します。この時点では、ほとんど役に立ちません。もう何も実行したり、コンテナを復活させることはできません。基本的に、停止状態を解除するには2つの方法があります。コンテナーを削除するか、停止したコンテナーからチェックポイント(つまり、イメージ)を作成して、他の何かを実行します。docker remove同じ名前でコンテナを起動する前に実行する必要があります。

コンテナーが自動的に停止したら、コンテナーを削除するには コマンドに--rmフラグを追加しrunます。

docker run --rm --name dname image_name bash -c "whoami"

単一のコンテナで複数のコマンドを実行するにはどうすればよいですか?そのルートプロセスが死ぬのを防ぐことによって。これは、最初に--detachedフラグを指定して不要なコマンドを実行し、次に「実行」を使用して実際のコマンドを実行することで実行できます。

docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"

では、なぜ必要なのdocker stopでしょうか。我々は無限のコマンドを使用して、以前のスニペットに発売この余韻コンテナを停止しますtail -f /dev/null

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