Dockerコンテナの操作
序章
Dockerは、実行に必要なすべてのものを含むファイルシステムをソフトウェアアプリケーションに提供するために使用される一般的なコンテナ化ツールです。 Dockerコンテナーを使用すると、ランタイム環境が容赦なく一貫しているため、ソフトウェアがデプロイされている場所に関係なく、ソフトウェアが同じように動作することが保証されます。
このチュートリアルでは、DockerイメージとDockerコンテナーの関係の概要を説明します。 次に、コンテナの実行、開始、停止、および削除の方法について詳しく説明します。
概要
Dockerイメージは、Dockerコンテナーの作成に使用される不活性なテンプレートと考えることができます。 イメージは通常、ルートファイルシステムで始まり、ファイルシステムの変更とそれに対応する実行パラメーターを順序付けられた読み取り専用レイヤーに追加します。 通常のLinuxディストリビューションとは異なり、Dockerイメージには通常、アプリケーションの実行に必要な最低限の要素のみが含まれています。 画像には状態がなく、変化しません。 むしろ、それらはDockerコンテナーの開始点を形成します。
docker run
コマンドを使用すると、画像の上に読み取り/書き込みレイヤーを追加してコンテナーを作成できます。 この読み取り専用レイヤーと読み取り/書き込みレイヤーの組み合わせは、ユニオンファイルシステムと呼ばれます。 実行中のコンテナー内の既存のファイルに変更が加えられると、ファイルは読み取り専用スペースから読み取り/書き込みレイヤーにコピーされ、そこで変更が適用されます。 読み取り/書き込みレイヤーのバージョンは、元のファイルを非表示にしますが、削除しません。 読み取り/書き込みレイヤーの変更は、個々のコンテナーインスタンス内にのみ存在します。 コンテナが削除されると、それらを保持するための手順を実行しない限り、変更はすべて失われます。
コンテナの操作
docker run
コマンドを使用するたびに、指定したイメージから新しいコンテナーが作成されます。 これは混乱の原因となる可能性があるため、いくつかの例を見てみましょう。
ステップ1:2つのコンテナーを作成する
次のdocker run
コマンドは、ベースubuntu
イメージを使用して新しいコンテナーを作成します。 -t
は端末を提供し、-i
はそれと対話できるようにします。 UbuntuベースイメージのDockerファイル、bash
のデフォルトコマンドを使用して、シェルにドロップします。
docker run -ti ubuntu
コマンドラインプロンプトが変わり、rootユーザーとしてコンテナ内にいることを示し、その後に12文字のコンテナIDが続きます。
コンテナの/tmp
ディレクトリにテキストをエコーして変更を加え、cat
を使用して正常に保存されたことを確認します。
echo "Example1" > /tmp/Example1.txt cat /tmp/Example1.txt
OutputExample1
それでは、コンテナを終了しましょう。
exit
Dockerコンテナーは、発行したコマンドが完了するとすぐに実行を停止するため、bashシェルを終了するとコンテナーが停止しました。 実行中のコンテナを表示するコマンドであるdocker ps
を実行すると、私たちのコンテナは表示されません。
docker ps
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
すべてのコンテナが停止または実行中であることを示す、-a
フラグを追加すると、コンテナがリストに表示されます。
docker ps -a
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi
コンテナが作成されると、コンテナIDとランダムに生成された名前が付けられました。 この場合、11cc47339ee1はコンテナIDであり、small_sinoussi
はランダムに生成された名前です。 ps -a
には、これらの値、コンテナーの作成元のイメージ(ubuntu
)、コンテナーの作成時(six minutes ago
)、および実行されたコマンドが表示されます。その中に(/bin/bash
)。 出力には、コンテナーのステータス(Exited
)と、コンテナーがその状態に入った時間(6 seconds ago
)も表示されます。 コンテナがまだ実行中の場合は、ステータス「Up」に続いて、実行されていた時間が表示されます。
同じコマンドを再実行すると、まったく新しいコンテナが作成されます。
docker run -ti ubuntu
コマンドプロンプトのIDが異なるため、新しいコンテナであることがわかります。また、Example1ファイルを検索しても、次のファイルは見つかりません。
cat /tmp/Example1
Outputcat: /tmp/Example1: No such file or directory
これにより、データが消えたように見える場合がありますが、そうではありません。 2番目のコンテナーを終了して、2番目のコンテナーと、作成したファイルを含む最初のコンテナーの両方がシステム上にあることを確認します。
exit
コンテナを再度リストすると、両方が表示されます。
docker ps -a
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg 11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi
ステップ2:最初のコンテナを再起動する
既存のコンテナを再起動するには、start
コマンドを使用して-a
フラグを添付し、-i
フラグを使用してインタラクティブにします。その後、いずれかのコンテナを使用します。 IDまたは名前。 以下のコマンドで、必ずコンテナのIDに置き換えてください。
docker start -ai 11cc47339ee1
コンテナのbashプロンプトが再び表示され、以前に作成したファイルをcat
しても、まだそこにあります。
cat /tmp/Example1.txt
OutputExample1
これでコンテナを終了できます。
exit
この出力は、コンテナー内で行われた変更が、コンテナーを停止および開始するまで持続することを示しています。 コンテンツが削除されるのは、コンテナが削除されたときだけです。 この例は、変更が個々のコンテナに限定されていることも示しています。 2番目のコンテナーを開始すると、イメージの元の状態が反映されました。
ステップ3:両方のコンテナーを削除する
2つのコンテナを作成し、それらを削除して簡単なチュートリアルを終了します。 docker rm
コマンドは、停止したコンテナーでのみ機能し、1つ以上のコンテナーの名前またはIDを指定できるため、次のようにして両方を削除できます。
docker rm 11cc47339ee1 kickass_borg
Output11cc47339ee1 kickass_borg
両方のコンテナ、およびそれらの内部で行った変更はすべてなくなりました。
結論
docker run
コマンドを詳しく調べて、実行するたびに新しいコンテナーが自動的に作成される方法を確認しました。 また、停止したコンテナを見つけて起動し、接続する方法についても説明しました。 コンテナーの管理について詳しく知りたい場合は、ガイド「 Dockerコンテナーの命名:初心者のための3つのヒント」に興味があるかもしれません。