序章

Dockerは、実行に必要なすべてのものを含むファイルシステムをソフトウェアアプリケーションに提供するために使用される一般的なコンテナ化ツールです。 Dockerコンテナーを使用すると、ランタイム環境が容赦なく一貫しているため、ソフトウェアがデプロイされている場所に関係なく、ソフトウェアが同じように動作することが保証されます。

このチュートリアルでは、DockerイメージとDockerコンテナーの関係の概要を説明します。 次に、コンテナーの実行、開始、停止、および削除の方法について詳しく説明します。

概要

Dockerイメージは、Dockerコンテナーの作成に使用される不活性なテンプレートと考えることができます。 イメージは通常、ルートファイルシステムで始まり、ファイルシステムの変更とそれに対応する実行パラメーターを順序付けられた読み取り専用レイヤーに追加します。 通常のLinuxディストリビューションとは異なり、Dockerイメージには通常、アプリケーションの実行に必要な最低限の要素のみが含まれています。 画像には状態がなく、変化しません。 むしろ、それらはDockerコンテナーの開始点を形成します。

docker runコマンドを使用すると、画像に活気が生まれます。このコマンドは、画像の上に読み取り/書き込みレイヤーを追加することでコンテナーを作成します。 この読み取り専用レイヤーと読み取り/書き込みレイヤーの組み合わせは、ユニオンファイルシステムと呼ばれます。 実行中のコンテナー内の既存のファイルに変更が加えられると、ファイルは読み取り専用スペースから読み取り/書き込みレイヤーにコピーされ、そこで変更が適用されます。 読み取り/書き込みレイヤーのバージョンは、元のファイルを非表示にしますが、削除しません。 読み取り/書き込みレイヤーの変更は、個々のコンテナーインスタンス内にのみ存在します。 コンテナが削除されると、それらを保持するための手順を実行しない限り、変更はすべて失われます。

コンテナの操作

docker runコマンドを使用するたびに、指定したイメージから新しいコンテナーが作成されます。 これは混乱の原因となる可能性があるため、いくつかの例を見てみましょう。

ステップ1:2つのコンテナを作成する

次のdocker runコマンドは、ベースubuntuイメージを使用して新しいコンテナーを作成します。 -tは端末を提供し、-iはそれと対話できるようにします。 UbuntuベースイメージのDockerファイルbashのデフォルトコマンドを使用して、シェルにドロップします。

  1. docker run -ti ubuntu

コマンドラインプロンプトが変わり、rootユーザーとしてコンテナ内にいることを示し、その後に12文字のコンテナIDが続きます。

コンテナの/tmpディレクトリにテキストをエコーして変更を加え、catを使用して正常に保存されたことを確認します。

  1. echo "Example1" > /tmp/Example1.txt
  2. cat /tmp/Example1.txt
Output
Example1

それでは、コンテナを終了しましょう。

  1. exit

Dockerコンテナーは、発行したコマンドが完了するとすぐに実行を停止するため、bashシェルを終了するとコンテナーが停止しました。 実行中のコンテナを表示するコマンドであるdocker psを実行すると、私たちのコンテナは表示されません。

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

すべてのコンテナが停止または実行中であることを示す、-aフラグを追加すると、コンテナがリストに表示されます。

  1. docker ps -a
Output
CONTAINER 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」に続いて、実行されていた時間が表示されます。

同じコマンドを再実行すると、まったく新しいコンテナが作成されます。

  1. docker run -ti ubuntu

コマンドプロンプトのIDが異なるため、新しいコンテナであることがわかります。また、Example1ファイルを検索しても、次のファイルは見つかりません。

  1. cat /tmp/Example1
Output
cat: /tmp/Example1: No such file or directory

これにより、データが消えたように見える場合がありますが、そうではありません。 2番目のコンテナーを終了して、2番目のコンテナーと、作成したファイルを含む最初のコンテナーの両方がシステム上にあることを確認します。

  1. exit

コンテナを再度リストすると、両方が表示されます。

  1. docker ps -a
Output
CONTAINER 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に置き換えてください。

  1. docker start -ai 11cc47339ee1

コンテナのbashプロンプトが再び表示され、以前に作成したファイルをcatしても、まだそこにあります。

  1. cat /tmp/Example1.txt
Output
Example1

これでコンテナを終了できます。

  1. exit

この出力は、コンテナー内で行われた変更が、コンテナーを停止および開始するまで持続することを示しています。 コンテンツが削除されるのは、コンテナが削除されたときだけです。 この例は、変更が個々のコンテナに限定されていることも示しています。 2番目のコンテナを開始したとき、それは画像の元の状態を反映していました。

ステップ3:両方のコンテナを削除する

2つのコンテナを作成し、それらを削除して簡単なチュートリアルを終了します。 docker rmコマンドは、停止したコンテナーでのみ機能し、1つ以上のコンテナーの名前またはIDを指定できるため、次のようにして両方を削除できます。

  1. docker rm 11cc47339ee1 kickass_borg
Output
11cc47339ee1 kickass_borg

両方のコンテナー、およびコンテナー内で行った変更はすべてなくなりました。

結論

docker runコマンドを詳しく調べて、実行するたびに新しいコンテナーが自動的に作成される方法を確認しました。 また、停止したコンテナを見つけて起動し、接続する方法についても説明しました。 コンテナーの管理について詳しく知りたい場合は、ガイド Dockerコンテナーの命名:初心者向けの3つのヒントに興味があるかもしれません。