Dockerコンテナの操作

提供:Dev Guides
移動先:案内検索

序章

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つのヒント」に興味があるかもしれません。